【问题标题】:Writing recursive solutions to a list将递归解决方案写入列表
【发布时间】:2015-11-15 04:29:49
【问题描述】:

我正在尝试编写一个函数,该函数将返回前 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

【问题讨论】:

  • 您忘记为第二个递归函数添加基本情况

标签: python list function recursion


【解决方案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])]

【讨论】:

    【解决方案2】:

    我建议迭代而不是递归:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-06-07
      • 1970-01-01
      • 1970-01-01
      • 2013-07-22
      • 1970-01-01
      • 2015-10-25
      • 1970-01-01
      相关资源
      最近更新 更多