python发现GCD递归地遇到错误

时间:2015-12-10 16:18:59

标签: python recursion

我有两段python代码,找到两个正整数' GCD。

这是正确的:

def gcdRecur(a, b):

    if b == 0:
        return a
    return gcdRecur(b, a%b)

这是一个有bug的人:

def gcdRecur(a, b):

    a = max(a, b)
    b = min(a, b)
    if b == 0:
        return a
    return gcdRecur(b, a%b)

很容易看出这两段代码之间的差异。我知道没有必要添加

 a = max(a, b)
 b = min(a, b)

在控制流程之前。我在后面的代码中找不到任何逻辑错误,但它打印出错误的结果。

------use former code find GCD of 182 ans 224------
print out 14
------use former code find GCD of 182 ans 224------
print out 224(wrong answer)

所以我猜它可能与python中的递归原理有关,我根本不知道。任何人都可以帮助我并告诉我T T是什么。

谢谢。

1 个答案:

答案 0 :(得分:0)

问题是,当您致电a = max(a,b)且b是最大值时,旧的a将会丢失,a将等于b,这会导致{gcd(b,b) == b 1}}