【问题标题】:Why Python recursive function returns None为什么 Python 递归函数返回 None
【发布时间】:2021-12-23 23:26:42
【问题描述】:

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

【问题讨论】:

  • 预期输出是什么?

标签: python


【解决方案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)

【讨论】:

    猜你喜欢
    • 2021-11-13
    相关资源
    最近更新 更多