在python中返回有问题

时间:2012-10-30 03:41:50

标签: python

####
# 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但它没有返回我在哪里出错了一切似乎都遵循逻辑步骤??

2 个答案:

答案 0 :(得分:4)

你应该return euclid_gcd(y,remainder)

你忘了在这里返回递归结果:

if(remainder != 0) :
    euclid_gcd(y,remainder)   

答案 1 :(得分: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似乎很奇怪

你得到None的原因是因为如果函数没有明确地返回任何内容,Python会隐式返回{{1}}