将递归解决方案写入列表

时间:2015-11-15 04:29:50

标签: python list function recursion

我正在尝试编写一个函数,它将返回前n个加泰罗尼亚数字的列表。这就是我到目前为止所提出的。

def catalan_numbers(n):
    if n == 0:
        return 1
    else:
        n -= 1
        return int((((2*n+2) * (2*n+1))/((n+1)*(n+2))) * catalan_numbers(n))

到目前为止,这为单个索引提供了正确的解决方案。因此,如果我打电话给catalan_numbers(4),将会返回14,这是正确的,但正是我所寻求的。我尝试解决此问题,执行以下操作:

def catalan_numbers(n):
    catalan = [1]
    for x in range(0, n):
        catalan.append(int((((2*n+2) * (2*n+1))/((n+1)*(n+2))) * catalan_numbers(n))
    return catalan

但是这会回来:

RuntimeError: maximum recursion depth exceeded in comparison

2 个答案:

答案 0 :(得分:1)

错误是因为您没有基本情况也检查以下代码而不是返回一个数字它返回一个列表并将当前n加泰罗尼亚数字与n-1列表连接

def catalan_numbers(n):
    if n == 0:
        return [1]
    else:
        n -= 1
        t = catalan_numbers(n)
        return t + [int((((2*n+2) * (2*n+1))/((n+1)*(n+2))) * t[-1])]

答案 1 :(得分:0)

我建议迭代迭代:

def catalan_numbers(N):
    C = [1]
    for n in range(1, N):
        C.append((4*n - 2) * C[-1] // (n + 1))
    return C