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处理递归计算的规则是什么?
发布于 2015-02-28 06:03:12
Python按照遇到调用指令的顺序运行每个调用。因此,从fac
的顶部开始,从n=6
开始,它将到达以下一行:
x=fac(n-1)+fac(n-2)+fac(n-3)
它将做的第一件事是计算n-1=5
,并运行fac(5)
--它再次从函数的顶部开始。它将到达相同的位置,调用fac(4)
,调用fac(3)
--只返回3。直到现在,它才会计算n-2=2
并运行fac(2)
,然后运行fac(1)
并执行加法。现在fac(4)
已经完成了,我们回到了fac(5)
,我们继续从fac(n-2)
出发。
如果修改函数以跟踪递归的深度,则可以将调用打印为树结构,以便更容易地查看所发生的事情:
def fac(n, level=0):
print '{}fac({})'.format(level*'\t', n)
if n==1 or n==2 or n==3:
return n
else:
x = fac(n-1, level+1) + fac(n-2, level+1) + fac(n-3, level+1)
return x
给予:
fac(6)
fac(5)
fac(4)
fac(3)
fac(2)
fac(1)
fac(3)
fac(2)
fac(4)
fac(3)
fac(2)
fac(1)
fac(3)
https://stackoverflow.com/questions/28778357
复制相似问题