我想指出一個可以更好地解釋函數使用多個遞歸調用時遞歸的引用。我想我知道當一個函數使用單個遞歸實例時,Python如何處理內存。在函數處理數據時,我可以使用打印語句來跟蹤數據在任何給定點的位置。然後,我可以逐步回溯這些步驟,以瞭解如何實現最終的返回值。多遞歸函數
在一次函數調用期間,多次遞歸遞歸實例被觸發時,我不再確定數據是如何被實際處理的。先前照明方式恰當的印刷品陳述揭示了一個看似量子的過程,或者至少更像伏都教。
爲了說明我的困惑,這裏有兩個基本的例子:斐波那契和河內塔的問題。
def getFib(n):
if n == 1 or n == 2:
return 1
return getFib(n-1) + getFib(n-2)
斐波那契示例具有兩個內聯調用。首先是getFib(n-1)
解決了整個堆棧,然後getFib(n-2)
類似地解決,每個結果被放入新的堆棧,並且這些堆棧逐行添加在一起,這些總和爲總和的結果?
def hanoi(n, s, t, b):
assert n > 0
if n ==1:
print 'move ', s, ' to ', t
else:
hanoi(n-1,s,b,t)
hanoi(1,s,t,b)
hanoi(n-1,b,t,s)
河內提出了一個不同的問題,因爲函數調用是連續的行。當函數到達第一個調用時,它是否解析爲n = 1,然後移到第二個已經n = 1的調用,然後是第三個調用,直到n = 1?
再一次,只是尋找參考資料,可以幫助我更好地瞭解引擎蓋下的情況。我相信在這種情況下可能要解釋一下。
我認爲第一個函數將永遠與遞歸'N = <0' –
我不明白你的問題。特別是「getFib(n-1)」首先解決了棧中的所有問題,然後同樣解決了「getFib(n-2)」,每個結果都被放入新的堆棧中,並且這些堆棧按行相加那麼這些總和就是爲了結果?「這是什麼意思?評估'getFib(n-1)',這意味着解釋器執行所有的代碼直到它接收到它的返回值。該代碼碰巧包含對'getFib'的其他調用。 – Bakuriu