创建加泰罗尼亚数字循环并绘制它 [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).
让我先声明一下,我是 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).