我想知道为什么它没有返回任何东西 - 我希望它能归还总和。我对递归很新,我做错了吗?
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
答案 0 :(得分:1)
else
块应该有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])
不会返回任何内容 BTW,if vec == []
可以安全地替换为if not vec
和sum = sum + vec.pop(0)
- sum += vec.pop(0)
以更加清晰(虽然这条线可能完全省略,见下文)。< / p>
总而言之,代码可能如下所示:
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))
答案 1 :(得分:1)
Python没有隐式返回。许多人似乎认为没有隐式返回的语言在使用递归时会有隐式返回。这不是真的。避免这种常见的陷阱并修复你的代码
def inc(sum,vec):
if vec==[]:
print "returning sum",sum
return sum
else:
sum = sum+vec.pop(0)
return inc(sum,vec)