这段代码是怎么运行的

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

阅读 2.8k
2 个回答

你要知道每次函数的调用,在其底层都是一次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。

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

推荐问题
logo
101 新手上路
子站问答
访问
宣传栏