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处理递归计算的规则是什么?
答案 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)