爲了計算加泰羅尼亞數,我寫了兩個代碼。一個(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]
另一個(def「catalanFormula」)應用隱式公式,但不從n = 30開始準確計算。問題來自浮點數 - 對於k = 9,程序返回「6835971.999999999」而不是「6835972」,並從此積累錯誤直到最終的錯誤答案。
(印刷線檢查)
def catalanFormula(n):
result = 1
for k in range(2, n + 1):
result *= ((n + k)/k)
print (result)
return int(result)
我試圖四捨五入和失敗,嘗試十進制進口,仍然沒有什麼權利。
我需要「catalanFormula」完美地作爲「加泰羅尼亞」; 任何想法?
謝謝!
你能用這個替代的加泰羅尼亞公式:'(2 * n)! /((n + 1)!* n!)'?它應該更精確,因爲術語都可以用整數算術計算,只有一個涉及浮點的最終分割。 – martineau
我必須使用表示的公式......這就是問題 – jizanthapus
你可以在不使用浮點數的情況下離開:在循環的每次迭代的開始或結束時,'(n + 1)* result'是總是一個整數。因此,您可以通過以下方式使用整數:(1)將result'初始化爲'n + 1'而不是'1',(2)用'result = result *(n + k)'替換更新行// k' ,(3)返回'result //(n + 1)'而不是'result'。 –