两个正整数python的最大公约数

时间:2017-11-08 13:16:57

标签: python python-3.x

def mike(a,b):
    d=min(a,b)
    e=d
    if max(a,b)%d==0 and e%d==0:
        return d
    else:
        return mike(max(a,b),d-1)
print(mike(12,18))

我找不到一种方法可以将'e'的值作为两个整数中最小值的固定值,在大小写为12的情况下。当代码移动时,'e'的值也是如此。但我希望它在两者中具有最小的固定值。抱歉,这个菜鸟问题。请帮助。

3 个答案:

答案 0 :(得分:0)

所以你不需要功能,你可以添加e作为可选参数

def mike(a,b,e=None):
    d=min(a,b)
    if not e:
        e=d
    if max(a,b)%d==0 and e%d==0:
    return d,e
    else:
        return mike(max(a,b),d-1,e)
print(mike(12,18))

这样你可以递归地调用它,并且仍然跟踪并输出原始函数的最小值

答案 1 :(得分:0)

我不明白为什么你设置e = d以及为什么你需要递归中的d-1

def mike(a,b):
    rest = max(a, b) % min(a, b)
    if rest == 0:
        return min(a, b)
    else:
        return mike(min(a, b), rest)

gcd的计算。

(48,30)

将最大值除以最低值,然后得到其余值。 48/30 = 1(休息18)

将前一个除数除以其余部分 30/18 = 1(休息12)

再将前一个除数除以其余的除数 18/12 = 1(休息6)

再将前一个除数除以其余的除数 12 / 6 = 2(休息0)

gcd是休息时的除数== 0

答案 2 :(得分:0)

我最终在最后做到了这一点。谢谢你的所有答案。我知道我让它变得更复杂了。

def mike(x,y):
    e=min(x,y)
    def mi(a,b):
        d=min(a,b)
        if max(a,b)%d==0 and e%d==0:
            return d
        else:
            return mi(max(a,b),d-1)
    zz=mi(x,y)
    return zz

print(mike(12,18))