首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >计算加泰罗尼亚数字

计算加泰罗尼亚数字
EN

Stack Overflow用户
提问于 2015-11-27 21:09:03
回答 3查看 4.9K关注 0票数 5

我尝试使用Python中的这段代码来计算加泰罗尼亚数字,但它就是不能工作。我怎么才能修复它?

下面是我的代码:

代码语言:javascript
复制
def catalan_rec(n):
    if n == 0:
        return 1
    else:
        b = 0
        for i in range (n):
            b += sum((catalan_rec(i))*(catalan_rec(n-1-i)))
    return b
EN

回答 3

Stack Overflow用户

发布于 2015-11-27 21:15:23

问题是你是在求和,实际上你应该乘法。来自Wikipedia的定义是:

您最好使用for循环而不是递归:

代码语言:javascript
复制
def catnumber(n):
  ans = 1.0
  for k in range(2,n+1):
     ans = ans *(n+k)/k
  return ans

编辑2

我认为公式是不正确的,但问题实际上是它使用了整数除法,因此舍入子结果。解决方案是使用一个浮点型变量,我是通过初始化ans=1.0来实现的。

票数 5
EN

Stack Overflow用户

发布于 2015-11-27 21:15:31

更改行:

代码语言:javascript
复制
b += sum((catalan_rec(i))*(catalan_rec(n-1-i)))

适用于:

代码语言:javascript
复制
b += (catalan_rec(i))*(catalan_rec(n-1-i))

您正在将一个整数作为参数传递给只接受iterable的函数sum()

票数 2
EN

Stack Overflow用户

发布于 2015-11-27 21:19:11

这似乎对我很有效(从你的代码)

代码语言:javascript
复制
def catalan_rec(n):
    b = 0
    if n == 0:
        return 1
    else:
        for i in range (n):
            b += (catalan_rec(i))*(catalan_rec(n-1-i))
    return b

print catalan_rec(5)

输出:

代码语言:javascript
复制
42
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33958133

复制
相关文章

相似问题

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