我遇到了一个奇怪的现象:记忆化的递归函数
我写了一个代码来计算“加泰罗尼亚号”,其工作,但现在我想通过使用记忆化的字典,以提高运行时(称为它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我可以确认代码适用于我:) –