问这个问题的原因是做codecademy的一道题,要求建一个阶乘的函数,所以我是这样建立的:
def factorial(x):
if x == 0 or x==1:
return 1
else:
x=int(x)
b=1
while x>1:
b=x*b
x=x-1
return b
但是我在论坛上面找到了一段简洁的多的代码:
def factorial(x):
if x==0:
return 1
return x * factorial(x-1)
第二个代码是怎么工作的呢,难道 他是把前面的依次算一次,直到1?
你要知道每次函数的调用,在其底层都是一次push操作,函数调用完后就返回是一次pop操作。以刚才的
print factorial(4)
调用为例子,一步一步分析:第一步:执行factorial(4),push一下
4 * ??
第二步:执行factorial(4-1),push一下
3 * ??
4 * ??
第三步:执行factorial(3-1),push一下
2 * ??
3 * ??
4 * ??
第四步:执行factorial(2-1),push一下
1 * ??
2 * ??
3 * ??
4 * ??
第五步:执行factorial(1-1),push一下,这个时候
x == 0:return 1
1 * 1
2 * ??
3 * ??
4 * ??
到了这里,函数到了
return 1
返回出口,表示该递归函数的最后一次调用完成了,本次调用应该返回了。第六步:pop factorial(1-1),返回1
2 * 1
3 * ??
4 * ??
第七步:pop factorial(2-1),返回2
3 * 2
4 * ??
第八步:pop factorial(3-1),返回6
4 * 6
第九步:pop factorial(4-1),返回24
整个递归函数执行完毕,得到结果24。