gpt4 book ai didi

Python 递归尝试未返回任何值

转载 作者:行者123 更新时间:2023-12-01 03:36:22 25 4
gpt4 key购买 nike

我想知道为什么它没有返回任何东西——我希望它返回总和。我对递归还很陌生,我做的这一切都错了吗?

def inc(sum,vec):
if vec==[]:
print "returning sum",sum
return sum
else:
sum= sum+vec.pop(0)
inc(sum,vec)

In [78]: s=inc(0,[6,7])
returning sum 13

In [79]: s

最佳答案

else block 应该有一个return inc(sum,vec)

为什么?看看这个:

  • inc(0, [6, 7]) 调用
    • else 中 -> 调用 inc(6, [7])
      • else 中 -> 调用 inc(13, [])
        • if vec == [] 中 -> 将 13 返回给前一个调用者
      • 现在 inc(13, []) == 13 仅此而已,该值不会传递到任何地方
    • inc(6, [7]) 不返回任何内容
  • inc(0, [6, 7]) 不返回任何内容

顺便说一句,if vec == [] 可以安全地替换为 if not vecsum = sum + vec.pop(0) - 使用 sum += vec.pop(0) 来更加清晰(尽管我可能会完全省略这一行,请参见下文)。

总而言之,代码可能如下所示:

def inc(sum, vec):
if not vec:
return sum
return inc(sum + vec.pop(0), vec)

此外,您还可以在 sum 参数中使用默认值:

def inc(vec, sum = 0): # << right here
if not vec:
return sum
return inc(vec, sum + vec.pop(0)) # change the argument position

这样这个函数的调用就会更加清晰:

inc(0, [6, 7]) # before
inc([6, 7]) # after

如果你想要一行字(不过可读性可能会差一些):

def inc(vec, sum = 0):
# return sum if vec is empty or the _result_ of a recursive call otherwise
return sum if not vec else inc(vec, sum + vec.pop(0))

关于Python 递归尝试未返回任何值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40323099/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com