我一直在尝试理解以下代码,它是我的 Python 书中的递归示例:
def mysum(L):
if not L:
return 0
else:
return L[0] + mysum(L[1:])
print(mysum([1, 2, 3, 4, 5]))
输出:15
我很难理解它是如何工作的,以及它如何返回 15
。
我尝试将代码重写为:
def mysum(L):
if not L:
return 0
else:
temp = L[0] + mysum(L[1:])
print(temp)
return temp
mysum([1, 2, 3, 4, 5])
此输出:
5
9
12
14
15
但我仍然不确定这是如何工作的,就像它开始向后求和一样。
5 + 4 + 3 + 2 + 1
返回 L[0] + mysum(L[1:])
我知道右侧的函数会在函数返回任何内容之前执行。在这种情况下,它是递归的,它会调用自身,直到 L 中没有元素为止。但如果它再次调用自己,那不是意味着它再次没有返回任何内容吗?这让我很困惑。
最佳答案
L[0]
是列表的头部,L[1:]
是其余部分。在每次调用中,该函数都会添加第一个元素以及剩余列表的总和。
所以发生的事情是:
mysum([1, 2, 3, 4, 5]) => 1 + mysum([2, 3, 4, 5])
mysum([1, 2, 3, 4, 5]) => 2 + mysum([3, 4, 5])
mysum([1, 2, 3, 4, 5]) => 3 + mysum([4, 5])
mysum([1, 2, 3, 4, 5]) => 4 + mysum([5])
mysum([1, 2, 3, 4, 5]) => 5 + mysum([])
mysum([]) => 0
最后一次调用后,一切都会返回。
也许不仅打印温度而且打印 L 对您会有帮助。
关于python - 尝试理解Python中的递归,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37442445/