以下代码对某些值(例如306,136
)返回none
,对某些值(42,84
)返回正确的答案。 打印一个
和返回一个
应该产生相同的结果,但它没有:
def gcdIter (a,b):
c = min (a,b)
d = max (a,b)
a = c
b = d
if (b%a) == 0:
print a
return a
gcdIter (a,b%a)
print gcdIter (a,b)
您正在忽略递归调用的返回值:
gcdIter (a,b%a)
递归调用与对其他函数的调用没有什么不同; 如果调用的结果是您想要产生的,那么您仍然需要对它做一些事情。 您需要用return
传递返回值
return gcdIter (a,b%a)
请注意,分配时可以分配给多个目标:
def gcdIter(a, b):
a, b = min(a, b), max(a, b)
if b % a == 0:
return a
return gcdIter(a, b % a)
你真的不需要关心这里值的大与小。 一个更紧凑的版本是:
def gcd_iter(a, b):
return gcd_iter(b, a % b) if b else abs(a)