カタロニア語の数字を計算するために、2 つのコードを書きました。1 つ (def "Catalan") は再帰的に機能し、正しいカタロニア語番号を返します。
dicatalan = {}
def catalan(n):
if n == 0:
return 1
else:
res = 0
if n not in dicatalan:
for i in range(n):
res += catalan(i) * catalan(n - i - 1)
dicatalan[n] = res
return dicatalan[n]
もう 1 つの (def "catalanFormula") は暗黙の式を適用しますが、n=30 から正確に計算しません。問題は浮動小数点に由来します - k=9 の場合、プログラムは "6835972" の代わりに "6835971.999999999" を返し、この瞬間から最終的な不正解までミスが蓄積されます。
(印刷行は確認用です)
def catalanFormula(n):
result = 1
for k in range(2, n + 1):
result *= ((n + k) / k)
print (result)
return int(result)
丸めを試みて失敗し、10 進インポートを試みましたが、まだ何も正しくありません。
「catalanFormula」が「catalan」として完全に機能する必要があります。何か案は?
ありがとう!