为了计算加泰罗尼亚数字,我写了两个代码。一个(def“加泰罗尼亚语”)以递归方式工作并返回正确的加泰罗尼亚语数字。
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”完美地称为“加泰罗尼亚语”; 任何想法?
谢谢!
答案 0 :(得分:0)
请参阅bigfloat包。
from bigfloat import *
setcontext(quadruple_precision)
def catalanFormula(n):
result = BigFloat(1)
for k in range(2, n + 1):
result *= ((BigFloat(n) + BigFloat(k)) / BigFloat(k))
return result
catalanFormula(30)
输出:
BigFloat.exact('3814986502092304.00000000000000000043', precision=113)
答案 1 :(得分:0)
尝试分别计算分子和分母,并在末尾划分它们。如果你这样做,你应该能够使浮点数更远一点。
我确信Python有一个有理数的包。使用理性是一个更好的主意。