首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为列表编写递归解决方案

为列表编写递归解决方案
EN

Stack Overflow用户
提问于 2015-11-15 04:29:49
回答 2查看 63关注 0票数 1

我试图写一个函数,它将返回第一个n个加泰罗尼亚数字的列表。到目前为止,这就是我想出来的。

代码语言:javascript
复制
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就会被返回,这是正确的,但恰恰是我想要的。我试图解决这个问题,做了以下工作:

代码语言:javascript
复制
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

但这一结果是:

代码语言:javascript
复制
RuntimeError: maximum recursion depth exceeded in comparison
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-11-15 04:38:34

我建议迭代而不是递归:

代码语言:javascript
复制
def catalan_numbers(N):
    C = [1]
    for n in range(1, N):
        C.append((4*n - 2) * C[-1] // (n + 1))
    return C
票数 0
EN

Stack Overflow用户

发布于 2015-11-15 04:37:53

错误的原因是,您没有大小写,还需要检查以下代码,而不是返回一个数字,而是返回一个列表,并将当前n个加泰罗尼亚数字与n-1的列表连接起来。

代码语言:javascript
复制
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
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33716420

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档