[英]the executed order of recursion function in python2.7
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處理遞歸計算的規則是什么?
Python按照遇到調用指令的順序運行每個調用。 因此,從n=6
的fac
頂部開始,它將到達以下行:
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)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.