如何在Python中将分数转换为连续分数?我试着环顾四周,发现人们使用Fraction模块做了与我的问题类似的事情,但我没有设法修改它们。我发现的图像示例:
因此,如果输入为181 101
,则输出应为1 1 3 1 4 4
。谢谢你!
答案 0 :(得分:2)
好的,让我们从一些数学开始。这背后的理由很简单。对于分数n / d,欧几里德除法是n = d * q + r,其中r 我们只需要n / d =(d * q + r)/ d = q + r / d,其中r < d 现在我们以1 /(r / d)= d / r进行迭代以获得继续分数 它将导致q的完成序列,因为分数序列的分母构成一个严格减小的整数序列,在最多d次运算中将达到0。 可能的Python实现可能是: 我们按预期得到:def cf(n, d):
"""Return the terms of the continued fraction when n is the numerator
and d the divisor as a list"""
if d == 0: return [] # Ok it is finished
q = n//d # compute the integer quotient
r = n - q*d # the rest
return [q] + cf(d, r) # and recurse...
>>> cf(181, 101)
[1, 1, 3, 1, 4, 4]
答案 1 :(得分:0)
类似于Serge的答案,我们可以编写一个迭代版本(Python3):
def cf(n, d):
res = []
q, r = divmod(n, d)
while r != 0:
res = res + [q]
q, r = divmod(d, r)
d = (d-r)//q
return res + [q]