为了账号安全,请及时绑定邮箱和手机立即绑定

递归原理是否这样?

就拿例题来说,我验证了一下过程,输出结果是1,2,6,24,120https://img1.sycdn.imooc.com//5b2b07880001759416000789.jpg

推测原理如下:

result=f(5)=5*f(4)----->120               

f(4)=4*f(3)----->24                            

f(3)=3*f(2)----->6                              

f(2)=2*f(1)------>2                            

f(1)=1*f(0)----->1                             

f(0)=0*f(-1) ?

f(-1)=?

递减到f(-1),不是应该输出“输出错误吗”,还有例题这样编还不如n<=1,result=1呢?我这样理解对吗?求大神帮忙详细解释,谢谢!

正在回答

2 回答

    当我们使用递归的时候,为了避免递归无限循环下去,往往需要设定一个边界。以你的程序为例,当n==0或n==1时,返回值已经是一个常数,而不是表达式或未知数,因此没有必要再去进行递归【因为0和1的阶乘都是1】,它会直接返回某个值【这里就是1】。所以n==0或n==1就是它的边界,此时不会在去计算f(-1)的值。

    写成n<=1,result=1也是可行的,但是可读性比较差,而且无形中扩大了对n的判定条件,所以一般使用递归时会直接写明n等于多少,而不是给出一个范围。

3 回复 有任何疑惑可以回复我~

factorial(<0) = "输出错误"
factorial(0,1) = 1
factorial(2) = factorial(1)*2= 2
factorial(3) = factorial(2)*3= (1*2)*3
factorial(4) = factorial(3)*4= (1*2*3)*4

factorial(5) = factorial(4)*5= (1*2*3*4)*5

3 回复 有任何疑惑可以回复我~
#1

胖虎爱学习

谢谢谢谢
2018-07-16 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
C语言入门
  • 参与学习       926207    人
  • 解答问题       20797    个

C语言入门视频教程,带你进入编程世界的必修课-C语言

进入课程

递归原理是否这样?

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信