私は、Monte Carlo近似法を使って、与えられた精度(小数点以下の桁数)にpiの値を計算する関数を作成しようとしています。近似値をpiのリテラル値と比較し、一致しない場合は、再帰的にその関数を呼び出して、より多くの試行で再試行することでこれを実行しようとしていました。 これは私がこれまで持っているものです。Python - 変数値が変化する再帰関数呼び出し
def estimate_pi(precision):
x = 1
N_tot = 0
N_hits = 0
for i in range(0,trials*10**x):
if(inside_circle(random.random(),random.random())==True):
N_hits = N_hits+1
N_tot = N_tot+1
else:
N_tot = N_tot+1
result = 4.0*N_hits/N_tot
if compare_to_pi(result,precision)==True:
print(result)
else:
x++
estimate_pi(precision)
if trials>999999:
raise Error('approximation not converging to given precision')
print(result)
近似のための試行回数を制御することになっている変数xは、1に関数が呼び出されるたびに初期化されますので、私はトラブルを抱えています。私は何をすべきかわからない、助けてください!
試行はどこで定義されていますか?それはグローバル変数ですか? – UnsignedByte
'x'をデフォルト値1にして、' x + 1'を再帰呼び出しに渡すだけです。最初の呼び出しは 'x'の明示的な引数なしで行うことができます。 – chepner
しかし、このタイプの再帰は、通常のループに置き換えられます。 – chepner