Python计算加泰罗尼亚数字

Reo*_*ont 13 python algorithm catalan

我有用二项式系数法计算加泰罗尼亚数的代码.

def BinominalCoefficient(n,k):
    res = 1;
    if (k > n - k):
        k = n - k
    for i in range(k):
        res *= (n - i)
        res /= (i + 1)
    return res
def CatalanNumbers(n):
   c = BinominalCoefficient(2*n, n)
   return (c//(n+1))
print (CatalanNumbers(510))
Run Code Online (Sandbox Code Playgroud)

当我尝试计算n大于510的加泰罗尼亚数字时,我有一个"纳"结果.为什么会发生这种情况?我该如何解决?

xnx*_*xnx 11

我假设您使用的是Python 3.

res /= (i + 1)应该res //= (i + 1)强制整数运算:

def BinominalCoefficient(n,k):
    res = 1
    if (k > n - k):
        k = n - k
    for i in range(k):
        res *= (n - i)
        res //= (i + 1)
    return res
def CatalanNumbers(n):
   c = BinominalCoefficient(2*n, n)
   return (c//(n+1))
print (CatalanNumbers(511))
Run Code Online (Sandbox Code Playgroud)

回报

2190251491739477424254235019785597839694676372955883183976582551028726151813997871354391075304454574949251922785248583970189394756782256529178824038918189668852236486561863197470752363343641524451529091938039960955474280081989297135147411990495428867310575974835605457151854594468879961981363032236839645
Run Code Online (Sandbox Code Playgroud)

你得到nan因为Python 3中的divison/=返回溢出的浮点数inf.