python - 尝试理解Python中的递归

标签 python python-2.7 python-3.x

我一直在尝试理解以下代码,它是我的 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/

相关文章:

python-3.x - 来自 sklearn 的机器学习

python-3.x - 使用 PIP 安装时遇到问题

python - 将白色添加到 pylab 颜色栏默认颜色图

python - 将 pandas 样式表导出到图像文件

python - 使用任务管理器进行并行计算

python - 检查列表中的单词并删除 pandas dataframe 列中的那些单词

python - 不确定如何从 Python 标准库导入模块

python - 使用字典替换文本文件中的单词

python - 使用 Pandas 将有序字符数据更改为数字数据

python-3.x - 排序字典由列表组成