问答详情
源自:5-7 递归函数(一)

递归原理是否这样?

就拿例题来说,我验证了一下过程,输出结果是1,2,6,24,120https://img1.mukewang.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呢?我这样理解对吗?求大神帮忙详细解释,谢谢!

提问者:江小白DM 2018-06-21 10:26

个回答

  • 柳劫难
    2018-07-13 15:28:53

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

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

  • 专注程序不可自拔
    2018-06-25 10:55:32

    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