0
####
# GCD calculator using euclidean algorithm
####

def euclid_gcd(x,y) :
    new_gcd = y
    remainder = x % y
    print x,y, new_gcd, remainder
    if(remainder != 0) :
        euclid_gcd(y,remainder)   
    else :
        print x,y, new_gcd, remainder
        return new_gcd

print 'x | y | new_gcd | remainder'
print euclid_gcd(252,198)

但是,当我运行此代码时,它会返回此...

x | y | new_gcd | remainder
252 198 198 54
198 54 54 36
54 36 36 18
36 18 18 0
36 18 18 0
None

在这种情况下它应该返回 18 但它没有返回我哪里出错了一切似乎都遵循逻辑步骤?

4

2 回答 2

4

你应该这样做return euclid_gcd(y,remainder)

您忘记在此处返回递归结果:

if(remainder != 0) :
    euclid_gcd(y,remainder)   
于 2012-10-30T03:43:14.220 回答
1

解决问题的另一种方法

def euclid_gcd(x, y):
    new_gcd = y
    remainder = x % y
    print x, y, new_gcd, remainder
    if remainder != 0:
        new_gcd = euclid_gcd(y, remainder)   
    print x, y, new_gcd, remainder
    return new_gcd

我建议这样做是因为new_gcd如果您只将变量初始化为y

你得到的原因是因为如果函数没有显式返回任何东西None,Python 会隐式返回None

于 2012-10-30T03:53:25.150 回答