为什么Python递归函数返回None

时间:2015-07-04 14:37:05

标签: python

以下代码对某些值(例如None)返回306, 136,对某些值(42, 84),它会正确返回答案。 print areturn a应该产生相同的结果,但它不会:

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 个答案:

答案 0 :(得分:5)

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

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)