创建加泰罗尼亚数字循环并绘制它 [python]

Creating Catalan number loop and graphing it [python]

让我先声明一下,我是 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()

别管编程了,你的公式看起来有问题。取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

你的 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).