解释这个函数的调用栈?

时间:2013-12-02 04:00:35

标签: python recursion

我有代码:

def recursion0(x):
    if x == 1:
        return 1
    else:
        recursion0(x-1)
        print x

我知道值2-x会打印,但我无法弄清楚如何映射调用堆栈。以下是我的想法。

设置x = 3. 3在递归0(3-1)中变为2,然后在递归0(2-1)中变为2。是1然后返回到调用它的函数,recursion0(2-1),然后打印2,因为它是x值?这之后会发生什么呢? 另一个问题,为什么在1之后打印x(而不是之前)?

1 个答案:

答案 0 :(得分:3)

您对recursion0(3)的来电不会返回1,而是None,因为您的其他路径不会返回任何内容。

要解决此问题,请将recursion0(x-1)更改为return recursion0(x-1)

当你的print在递归之后,打印顺序与调用顺序相反。


  

我想要1-x打印的值,这个过程如何工作?

def recursion0(x):
    if x == 0: return
    recursion0(x-1)
    print (x)

recursion0(3)

输出是:

>>> 
1
2
3