Python 计算加泰罗尼亚的数字,最多10亿
我对python(以及一般的编程)是新手,我在课堂上被要求计算多达10亿的加泰罗尼亚数字,但我为其编写的程序没有按预期工作Python 计算加泰罗尼亚的数字,最多10亿,python,catalan,Python,Catalan,我对python(以及一般的编程)是新手,我在课堂上被要求计算多达10亿的加泰罗尼亚数字,但我为其编写的程序没有按预期工作 from numpy import division C=1 n=0 while C<=10000000000: print (C) C=(4*n+2)/(n+2)*C n=n+1 来自numpy进口部 C=1 n=0 当C时,尝试以下方法: from scipy.special im
from numpy import division
C=1
n=0
while C<=10000000000:
print (C)
C=(4*n+2)/(n+2)*C
n=n+1
来自numpy进口部
C=1
n=0
当C时,尝试以下方法:
from scipy.special import factorial
C = 1
n = 0
while C <= 10000000000:
print(C)
C = factorial(2*n, exact=True)/(factorial((n+1), exact=True)*factorial(n, exact=True))
n = n + 1
来自scipy.special import factorial的
C=1
n=0
当C时,尝试以下方法:
from scipy.special import factorial
C = 1
n = 0
while C <= 10000000000:
print(C)
C = factorial(2*n, exact=True)/(factorial((n+1), exact=True)*factorial(n, exact=True))
n = n + 1
来自scipy.special import factorial的
C=1
n=0
而C解决了这个问题
你对加泰罗尼亚数字的数学定义在翻译成代码时是不正确的
这是因为Python等编程语言中的运算符优先级
乘法和除法都具有相同的优先级,因此它们是从左到右计算的。发生的情况是,除法运算(4*n+2)/(n+2)
发生在与C
相乘之前。当n
为2时,2*(2*n+2)/(n+2)
变为10/4
,在整数算术中为2
1*C
在本阶段为2
,给出的是4
,而不是预期的5
。
一旦序列中的某个数字不正确,则迭代计算是不正确的
可能的解决办法
这是定义
也就是说,第n个加泰罗尼亚数字由下式给出:
import operator as op
def ncr(n, r):
r = min(r, n-r)
if r == 0: return 1
numer = reduce(op.mul, xrange(n, n-r, -1))
denom = reduce(op.mul, xrange(1, r+1))
return numer//denom
def catalan(n):
return ncr(2*n, n)/(n+1)
这不是很有效,但至少是正确的
正确的解决方案
要计算级数,可以使用递归公式
对于前几个,它看起来是这样的:
0 1
1 1
2 2
3 5
4 14
5 42
6 132
7 429
8 1430
9 4862
10 16796
问题
你对加泰罗尼亚数字的数学定义在翻译成代码时是不正确的
这是因为Python等编程语言中的运算符优先级
乘法和除法都具有相同的优先级,因此它们是从左到右计算的。发生的情况是,除法运算(4*n+2)/(n+2)
发生在与C
相乘之前。当n
为2时,2*(2*n+2)/(n+2)
变为10/4
,在整数算术中为2
1*C
在本阶段为2
,给出的是4
,而不是预期的5
。
一旦序列中的某个数字不正确,则迭代计算是不正确的
可能的解决办法
这是定义
也就是说,第n个加泰罗尼亚数字由下式给出:
import operator as op
def ncr(n, r):
r = min(r, n-r)
if r == 0: return 1
numer = reduce(op.mul, xrange(n, n-r, -1))
denom = reduce(op.mul, xrange(1, r+1))
return numer//denom
def catalan(n):
return ncr(2*n, n)/(n+1)
这不是很有效,但至少是正确的
正确的解决方案
要计算级数,可以使用递归公式
对于前几个,它看起来是这样的:
0 1
1 1
2 2
3 5
4 14
5 42
6 132
7 429
8 1430
9 4862
10 16796
这可以通过递归来解决:
def catalan(n):
if n <=1 :
return 1
res = 0
for i in range(n):
res += catalan(i) * catalan(n-i-1)
return res
for i in range(10000000000):
print (catalan(i))
def加泰罗尼亚语(n):
如果n这是使用递归解决的:
def catalan(n):
if n <=1 :
return 1
res = 0
for i in range(n):
res += catalan(i) * catalan(n-i-1)
return res
for i in range(10000000000):
print (catalan(i))
def加泰罗尼亚语(n):
如果n
这将以错误的顺序应用计算。因为您使用的是整数运算,(4*n+2)/(n+2)
会丢失信息,如果您尚未将C
考虑在内。正确的计算方法是:
C=C*(4*n+2)/(n+2)
这将以错误的顺序应用计算。因为您使用的是整数运算,(4*n+2)/(n+2)
会丢失信息,如果您尚未将C
考虑在内。正确的计算方法是:
C=C*(4*n+2)/(n+2)
基于以下表达式:
基于以下表达式:
什么是加泰罗尼亚数字?你期望的结果是什么?这是一系列用于量子力学和无序系统理论的数字。我所期待的答案是:1,1,2,5,14,42,132,429,1430,4862,16796,58786,208012,742900,2674440,9694845,35357670,129644790,477638700,1767263190。我给出的公式是Co=1,Cn+1=(4*n+2)/(n+2)*请提供加泰罗尼亚数字的具体定义。问题是因为你使用的是整数除法。试着对术语稍作重新排序:C=((4*n+2)*C)/(n+2)
什么是加泰罗尼亚数字?你期望的结果是什么?这是一系列用于量子力学和无序系统理论的数字。我所期待的答案是:1,1,2,5,14,42,132,429,1430,4862,16796,58786,208012,742900,2674440,9694845,35357670,129644790,477638700,1767263190。我给出的公式是Co=1,Cn+1=(4*n+2)/(n+2)*请提供加泰罗尼亚数字的具体定义。问题是因为你使用的是整数除法。尝试对术语进行轻微的重新排序:C=((4*n+2)*C)/(n+2)
有一种方法可以根据维基百科页面上显示的前一个术语定义一个加泰罗尼亚数字。是的,有,这在计算序列时可能更有效,但我想指出定义中所示的第n个术语的公式。我还将为此添加一段代码。有一种方法可以根据维基百科页面上显示的上一个术语定义一个加泰罗尼亚数字。是的,有,这在计算序列时可能更有效,但我想指出定义中指出的第n个术语的公式。我也会为此添加一段代码。非常感谢!这就是我要找的。我对编程很陌生,谢谢你的解释,非常感谢!这就是我要找的。我对编程很陌生,谢谢你的解释。