递归版更相减损术

《九章算术》中有约分术:

可半者半之,不可半者,复置分母子之数,以少减多,更相减损,求其等也,以等数约之。

在这里,以这种方法求最大公约数,采用函数递归的方法,python实现。

def gcd(a, b, base = 1):
    while a % 2 == 0 and b % 2 == 0:
        a = a / 2
        b = b / 2
        base = base * 2
    if a < b:
        a, b = b, a
    if a == b:
        return a * base
    return gcd(a - b, b, base)

a = input("a: ")
b = input("b: ")
a = int(a)
b = int(b)

c = gcd(a, b)
print("gcd of %d and %d is %d" % (a, b, c))
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章