python函数应用请大神帮我看代码问题,python大神,问这个问题的原因是做co


问这个问题的原因是做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。

第二个代码叫递归,你的那个叫循环

编橙之家文章,

评论关闭