python2.7中递归函数的执行顺序

时间:2015-02-28 05:12:31

标签: python python-2.7 recursion

def fac(n):
    if n==1 or n==2  or n==3:
        print "i am calling fac(",n,")"
        return  n
    else:
        print "i am calling fac(",n,")"
        x=fac(n-1)+fac(n-2)+fac(n-3)
        return  x  

fac(6)的输出是:

fac(6)
i am calling fac( 6 )
i am calling fac( 5 )
i am calling fac( 4 )
i am calling fac( 3 )
i am calling fac( 2 )
i am calling fac( 1 )
i am calling fac( 3 )
i am calling fac( 2 )
i am calling fac( 4 )
i am calling fac( 3 )
i am calling fac( 2 )
i am calling fac( 1 )
i am calling fac( 3 )
20

python2.7执行递归函数的规则是什么? 结果使我感到困惑,无法从计算树中进行分析。 为什么结果不是其他形式?

python处理递归计算的规则是什么?

1 个答案:

答案 0 :(得分:5)

Python按照遇到调用它的指令的顺序运行每个调用。因此,从fac的{​​{1}}顶部开始,它将到达此行:

n=6

它首先要做的是计算x=fac(n-1)+fac(n-2)+fac(n-3) ,然后运行n-1=5 - 它会再次在函数的顶部开始。它会到达同一个地方并致电fac(5),它会调用fac(4) - 只返回3.现在只计算fac(3)并运行n-2=2,然后{{ 1}}并添加。现在fac(2)已经完成,我们回到fac(1),我们继续fac(4)

如果您修改功能以跟踪您的递归程度,您可以将呼叫打印为树形结构,以便您可以更轻松地查看更多内容:

fac(5)

给出:

fac(n-2)