递归案例--阶乘(精讲)

举报
裴士 发表于 2022/02/21 10:51:08 2022/02/21
【摘要】 首先学习递归还要回顾递归的三要素: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

图片7.PNG

这里算的是10的阶乘(可以改变数字但是要考虑会不会超出可计算范围),定义一个为f的方法,阶乘因为增加数值会很大,所以防止超出int的上限值,采用的long,判断n等不等于1,随着一次一次的递归n一定不小于1,所以n=1是这个问题的终止条件,所以当n=1时递归结束。三要素中的第三步,要把这个问题分解成一个一个的小问题,所以运用相同的逻辑,最后不断地缩小问题的规模。最终得出最后的答案。

结果如下:

图片8.PNG

用循环方法来验证一下:

图片6.PNG

首先设定一个num=1的值

之后进行循环操作,int i=1 让i不大于10(可以改变,想算谁的阶乘写谁),让i不断增加,随着i的增加让num和每一个i相乘,在循环完成后输出num的值。

num的值就是阶乘的答案。


结果如下:说明上述方法输出正确

图片8.PNG

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。