计算加泰罗尼亚数字

时间:2015-11-27 13:09:03

标签: python catalan

我正在尝试使用此代码来计算Python中的加泰罗尼亚语数字,但它不起作用。我该如何解决?

这是我的代码:

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

3 个答案:

答案 0 :(得分:2)

问题在于你在总结,你应该实际上成倍增加。来自Wikipedia的定义是:

catalan number formula

您可以更好地使用for循环而不是递归:

def catnumber(n):
  ans = 1.0
  for k in range(2,n+1):
     ans = ans *(n+k)/k
  return ans

修改2

我认为公式不正确,但实际上问题是它使用了整数除法,因此舍入了子结果。解决方案是使用float变量,我通过使用ans=1.0初始化来完成此操作。

答案 1 :(得分:2)

更改行:

b += sum((catalan_rec(i))*(catalan_rec(n-1-i)))

有关:

b += (catalan_rec(i))*(catalan_rec(n-1-i))

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

答案 2 :(得分:1)

这似乎对我有用(来自你的代码)

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)

输出:

42