递归案例--阶乘(精讲)
【摘要】 首先学习递归还要回顾递归的三要素:1、明确递归终止条件;递归就是有去有回,所以一定有一个明确的临界点,程序一旦到达了这个临界点,就不会继续往下递下去而是开始实实在在的归来。2、给出递归终止时的处理办法;在递归的临界点会存在一个情景,在这个情景下我们可以给出一个解决问题的方法,运用这个方法可以让我们的问题解决起来更加的容易,简单,明确。3、提取重复的逻辑,缩小问题规模。递归问题一定是可以分解成...
首先学习递归还要回顾递归的三要素:
1、明确递归终止条件;
递归就是有去有回,所以一定有一个明确的临界点,程序一旦到达了这个临界点,就不会继续往下递下去而是开始实实在在的归来。
2、给出递归终止时的处理办法;
在递归的临界点会存在一个情景,在这个情景下我们可以给出一个解决问题的方法,运用这个方法可以让我们的问题解决起来更加的容易,简单,明确。
3、提取重复的逻辑,缩小问题规模。
递归问题一定是可以分解成n个小问题,同时这些个小问题是与原问题形式相同,这些小问题可以用同样的思路解决。
经典案例:阶乘
阶乘在数学中表示从1到一个数的乘积。例如:10!=1*2*3*4*5*6*7*8*9*10
2!=1*2
3!=1*2*3
这里算的是10的阶乘(可以改变数字但是要考虑会不会超出可计算范围),定义一个为f的方法,阶乘因为增加数值会很大,所以防止超出int的上限值,采用的long,判断n等不等于1,随着一次一次的递归n一定不小于1,所以n=1是这个问题的终止条件,所以当n=1时递归结束。三要素中的第三步,要把这个问题分解成一个一个的小问题,所以运用相同的逻辑,最后不断地缩小问题的规模。最终得出最后的答案。
结果如下:
用循环方法来验证一下:
首先设定一个num=1的值
之后进行循环操作,int i=1 让i不大于10(可以改变,想算谁的阶乘写谁),让i不断增加,随着i的增加让num和每一个i相乘,在循环完成后输出num的值。
num的值就是阶乘的答案。
结果如下:说明上述方法输出正确
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)