-1

让我先说一下,我完全是 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()
4

2 回答 2

1

您的 Catalan 函数有两个主要错误。

首先,如http://en.wikipedia.org/wiki/Catalan_number中所见,您编写的公式对于根据 Catalan(n) 计算 Catalan(n+1) 很有用。要使用它根据 Catalan(n-1) 计算 Catalan(n),就像您所做的那样,您必须移动索引。所以它应该是 (4*n-2)/(n+1)*Catalan(n-1)。

其次,python 在处理整数时使用整数算术。因此,商会向下舍入为整数(即​​ 5/2 给出 2,而不是 2.5)。解决这个问题的一种方法是先写乘积,然后写商:(4*n-2)*Catalan(n-1)/(n+1)。

于 2015-03-03T19:53:04.203 回答
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
于 2015-03-03T19:52:54.040 回答