【发布时间】:2012-11-26 12:15:36
【问题描述】:
我遇到了一个奇怪的现象:
我写了一个代码来计算“加泰罗尼亚数字”,这很有效,但现在我正在尝试通过使用记忆字典(称为双加泰罗尼亚语)来提高运行时间:
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 is 1:1”然后神秘地停止,但在 IDLE 中相同的代码打印“dicatalan is 0:1” .
无论如何,在尝试打印以后的双加泰罗尼亚语时,我收到了 {}。
怎么可能?代码中发生了什么? 运行调试器被证明是徒劳的。
有什么想法可以让 dict 正常工作吗?
【问题讨论】:
-
我认为您从未在双加泰罗尼亚语中存储 0,这是导致更多问题的原因。
-
在缩进代码后,它在这里工作得很好(字典内容、打印、结果)。在我对您的帖子进行编辑后,您能否确认您的缩进是相同的?
-
@mmgp 我可以确认代码对我来说可以正常工作:)
-
这对我也很有效。有一个库可以在 functools 中进行记忆:stackoverflow.com/a/12562777/1240268
标签: python dictionary memoization