我遇到了一個奇怪的現象:記憶化的遞歸函數
我寫了一個代碼來計算「加泰羅尼亞號」,其工作,但現在我想通過使用記憶化的字典,以提高運行時(稱爲它dicatalan):
dicatalan = {}
def catalan(n):
if n == 0:
return 1
else:
res = 0
if n not in dicatalan:
for i in range(n):
res += catalan(i) * catalan(n - i - 1)
dicatalan[n] = res
print ("dicatalan is", dicatalan)
return dicatalan[n]
這裏的漁獲物 - 在Eclipse - Pydev的 - 爲n=1
代碼運行中途打印效果與預期:「dicatalan是1:1」停止神祕之前,但在IDLE同一代碼打印「雙癸酸是0:1「。
任何情況下,當試圖打印稍後我接收到的{} dicatalan。
這怎麼可能?代碼中發生了什麼?運行調試器的 證明是徒勞的。
dict有什麼想法嗎?
我不認爲你曾經0存儲在dicatalan,這是進一步的問題的原因。 –
縮進代碼後,它在這裏工作得很好(字典內容,印刷品,結果)。您可以確認您的縮進是否與您的帖子上的編輯相同? – mmgp
@mmgp我可以確認代碼適用於我:) –