1

私は宿題のためにカタロニア語の数ジェネレーターをプログラミングしており、pytohon で再帰的なプログラムを実行しています。

プログラム:

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

print catalan(10)

5832 を返します。これは間違った答えですが、

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

print catalan(10)

正解は 16796 です。

では、python は PEMDAS に従っていませんか?

4

1 に答える 1

2

PEMDAS と同様に、python は式を左から右に評価します。を評価し(4*n-2)/(n+1)、保存して (結果を呼び出しますX)、計算しX/catalan(n-1)ます。

問題は、 の値はX何ですか? (4*n-2)/(n+1)は n のすべての値の整数ではありませんが、 の値を渡す場合はnpython であり、int 整数除算を実行しています。その結果、計算の小数部分が破棄され、計算が狂ってしまいます。

(4*n-2)*catalan(n-1)式が の倍数になるというカタロニア語関数のプロパティにより、2 番目の反復が機能しn-1ます。このようにして、(潜在的に破壊的な) 除算を式の最後に残すと、計算の数学的特性が役に立ちます。

于 2015-09-25T21:30:50.163 に答える