为什么Python递归函数返回None

2024-09-26 17:54:25 发布

您现在位置:Python中文网/ 问答频道 /正文

下面的代码在某些值(例如306, 136)上返回None,在某些值(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)

Tags: 答案代码nonereturnifdefminmax
1条回答
网友
1楼 · 发布于 2024-09-26 17:54:25

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

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)

相关问题 更多 >

    热门问题