我有Python代码来解决一些递归,我想让它返回一些分数。
问题是我的代码返回荒谬的分数(这是正确的),但它们不是可能的最小分数,我知道它,因为我可以手动解决公式。
这是我的代码:
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不同)。
这里有什么问题?
答案 0 :(得分:6)
在进行数学运算之前转换为Fraction
个对象,而不是之后:
def t(n):
n = Fraction(n)
if n==0:
return n
else:
return 1/(4-t(n-1))
如果在转换为Fraction
之前进行数学计算,则数学将作为浮点数学运算完成,从而为您提供不精确的结果,然后转换为不精确的Fraction
。
如果你先转换,那么数学就会以分数数学的方式完成,并且事情保持精确。