python 中的分数返回大得离谱的数字

Fractions in python returning ridiculously big numbers

我有 Python 代码来解决一些递归问题,我希望它 return 一些分数。

问题是我的代码 returns 可笑的分数(这是正确的)但它们不是最小的分数,我知道这一点,因为我可以手解公式。

这是我的代码:

from __future__ import division
import sys
from fractions import Fraction
def t(n):
    if n==0:
        return 0
    else:
        return 1/(4-t(n-1))

print(Fraction(t(int(sys.argv[1]))))

如果你 运行 这个代码 python fraction.py 2 你应该有 4/15 但这是我得到的:

4803839602528529/18014398509481984

我认为这在数值上是正确的,当我计算它时我得到 0.26666666666666666(也许两个分数在 x 位上与 0 不同)。

这里有什么问题?

转换为 Fraction 对象 在您计算之前,而不是在:

之后
def t(n):
    n = Fraction(n)
    if n==0:
        return n
    else:
        return 1/(4-t(n-1))

如果您在转换为 Fraction 之前进行数学运算,则数学运算将作为浮点数学运算完成,给您一个不精确的结果,然后您将其转换为不精确的 Fraction.

如果您先进行转换,那么数学会以分数数学的形式完成,并且事情会保持精确。