2015-07-16 15 views
10

Binominal Katsayılar yöntemiyle katalan sayılarını hesaplayan bir kodum var. i bu oluyor Neden fazla 510 n Katalan sayısını hesaplamak çalıştığınızda Python Katalan Sayılarını Hesaplama

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)) 

Ben "nan" sonucunu var? Ve bunu nasıl çözebilirim?

+0

"Nan" değerini elde edersiniz, çünkü BinominalCoefficient (1022, 511) '' inf' döndürür. –

+0

Python 3 kullanıyor musunuz? Eğer öyleyse, floatlardan kaçınmak için '//' tamsayı bölümünü kullanın (yine de bu hesaplama için onlara ihtiyacınız yoktur). –

+0

Hangi python sürümünü kullanıyorsunuz? Her iki python 2.6.6 ve python 3.4.3 –

cevap

9

Ben Python 3. kullandığınız varsayılmaktadır

Sizin res /= (i + 1)res //= (i + 1) tamsayı aritmetik zorlamak olmalıdır: Sen nan olsun

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)) 

döner

2190251491739477424254235019785597839694676372955883183976582551028726151813997871354391075304454574949251922785248583970189394756782256529178824038918189668852236486561863197470752363343641524451529091938039960955474280081989297135147411990495428867310575974835605457151854594468879961981363032236839645 

çünkü divison/= Python 3'te inf'a taşan bir kayan döndürür.

+0

Teşekkürler, benim için çalışıyor. – Reodont