2017-03-13 7 views
1

目標はカタロニア数を生成することです!私のコードはn = 30まで働きます(私はJAVAで同じアルゴリズムを試してみましたが、まったく正しいですが、Pythonで何か変わってしまいます、n = 30の後に間違った数字が戻ってきます。丸めまたは多分フォーマットはなく、自分でそれを把握することはできません!再帰的なpythonで数字のシーケンスを生成する

def catalan(n): 
if n < 0: 
    return -1 
else: 
    if n == 0: 
     return 1 
    else: 
     c_n = (4*n-2)/(n+1)*catalan(n-1) 
    return int(c_n) 

答えて

4

/(n+1)を使用することによりについて、あなたはその性質によって制限された精度を持つ浮動小数点数を、生産する。この精度は、のために十分に正確ではありませんn> 30で表示されるより大きい数字。

代わりに、整数に固定された数式を使用します。最初に乗算し、整数除算を実行します。

c_n = (4*n-2)*catalan(n-1)//(n+1) 

intへのキャストも、その後不要であり、あなただけ行うことができます。

return c_n 

サイドノートでは:あなたがelseを必要としないとき、ステートメントのif一部であなたreturn。だからあなたは書くことができます:

def catalan(n): 
    if n < 0: 
     return -1 
    if n == 0: 
     return 1 
    return (4*n-2)*catalan(n-1)//(n+1) 
関連する問題