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