将分数转换为连续分数

时间:2018-01-04 11:46:03

标签: python fractions continued-fractions

如何在Python中将分数转换为连续分数?我试着环顾四周,发现人们使用Fraction模块做了与我的问题类似的事情,但我没有设法修改它们。我发现的图像示例:

example

因此,如果输入为181 101,则输出应为1 1 3 1 4 4。谢谢你!

2 个答案:

答案 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]