提问者:小点点

为什么Python递归函数返回None


以下代码对某些值(例如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)

共1个答案

匿名用户

您正在忽略递归调用的返回值:

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)