让我先说一下我完全是python的新手并为此编程,我需要创建一个程序来打印所有加泰罗尼亚数字,最多可达一万亿。我已经写出了程序的基础知识,但我似乎无法理解为什么我没有得到正确的数字。此外,当我尝试绘制趋势图时,我正在运行程序。在此先感谢,这是我的代码:
import numpy as np
import scipy as sp
from pylab import *
def Catalan(n):
if n==0:
return (1)
elif n==1:
return (1)
else:
return ((4*n+2)/(n+2))*Catalan(n-1)
for n in range(18):
print (Catalan(n))
n=np.linspace(0,18,100)
y=Catalan(n)
plot(n,y,'r')
show()
答案 0 :(得分:1)
加泰罗尼亚语功能有两个主要错误。
首先,如http://en.wikipedia.org/wiki/Catalan_number所示,您编写的公式对于根据加泰罗尼亚语(n)计算加泰罗尼亚语(n + 1)非常有用。要用它来计算加泰罗尼亚语(n)的加泰罗尼亚语(n),就像你一样,你必须改变索引。所以它应该是(4 * n-2)/(n + 1)*加泰罗尼亚语(n-1)。
其次,python在处理int时使用整数运算。因此,商数向下舍入到整数(这是,5/2给出2,而不是2.5)。解决这个问题的一种方法是首先写出产品,然后写出商:(4 * n-2)*加泰罗尼亚语(n-1)/(n + 1)。
答案 1 :(得分:0)
没关系编程,你的公式看起来很糟糕。拿n=2
:
return ((4*n+2)/(n+2))*Catalan(n-1)
= ((4*2+2)/(2+2))*Catalan(2-1)
= (( 8 +2)/( 4 ))*Catalan( 1 )
= (( 10 )/ 4 )* 1
= 2.5