江小白DM
2018-06-21 10:26
就拿例题来说,我验证了一下过程,输出结果是1,2,6,24,120
推测原理如下:
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呢?我这样理解对吗?求大神帮忙详细解释,谢谢!
当我们使用递归的时候,为了避免递归无限循环下去,往往需要设定一个边界。以你的程序为例,当n==0或n==1时,返回值已经是一个常数,而不是表达式或未知数,因此没有必要再去进行递归【因为0和1的阶乘都是1】,它会直接返回某个值【这里就是1】。所以n==0或n==1就是它的边界,此时不会在去计算f(-1)的值。
写成n<=1,result=1也是可行的,但是可读性比较差,而且无形中扩大了对n的判定条件,所以一般使用递归时会直接写明n等于多少,而不是给出一个范围。
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
C语言入门
926210 学习 · 20797 问题
相似问题