Python 用记忆法计算加泰罗尼亚数字

Python 用记忆法计算加泰罗尼亚数字,python,python-2.7,recursion,memoization,catalan,Python,Python 2.7,Recursion,Memoization,Catalan,我试图用记忆来计算加泰罗尼亚的数字,但它似乎不起作用,我需要改变什么 def catalan_mem(n, mem = None): if n==0: return 1 if mem==None: mem={} sum=0 if n not in mem: for i in range(0, n): sum = sum + catalan_mem(i) * catalan_mem(n-i-1)

我试图用记忆来计算加泰罗尼亚的数字,但它似乎不起作用,我需要改变什么

def catalan_mem(n, mem = None):
    if n==0:
        return 1
    if mem==None:
        mem={}
    sum=0
    if n not in mem:
        for i in range(0, n):
            sum = sum + catalan_mem(i) * catalan_mem(n-i-1)
        mem[n]=sum
    return mem[n] 

您需要将缓存传递给递归调用:

sum = sum + catalan_mem(i, mem) * catalan_mem(n-i-1, mem)

否则,每个方法调用都会创建一个新的空缓存。

mem
作为参数传递给递归调用,或将
mem
定义为全局