我正在尝试使用此代码来计算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
答案 0 :(得分:2)
问题在于你在总结,你应该实际上成倍增加。来自Wikipedia的定义是:
您可以更好地使用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