我遇到了一个奇怪的现象:
我编写了一个代码来计算“加泰罗尼亚数字”,但是现在我正试图通过使用Memoization字典(称为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]
这是捕获 - 在日食 - Pydev - 对于n=1
代码中途运行并按预期打印:“dicatalan是1:1”然后神秘地停止,但在IDLE中相同的代码打印“dicatalan为0: 1“。
任何情况下,当我尝试打印后来的dicatalan时,我收到了{}。
怎么可能?代码中会发生什么? 运行调试器证明是徒劳的。
有关制作词典的任何想法吗?
答案 0 :(得分:1)
也适合我,我冒昧地简化了你的代码:
def catalan(n, memo={0: 1}):
if n not in memo:
memo[n] = sum((catalan(i) * catalan(n - i - 1)) for i in range(n))
return memo[n]