3

我遇到了一个奇怪的现象:

我写了一个代码来计算“加泰罗尼亚数字”,它有效,但现在我试图通过使用记忆字典(称为双加泰罗尼亚语)来改善运行时间:

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 工作吗?

4

1 回答 1

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]
于 2012-12-08T14:44:40.210 回答