首页 > 解决方案 > 列表如何在 python 递归中工作,为什么递归中的 int + list 不会失败?

问题描述

我刚开始学习递归,在阅读了一些文章之后,我想知道为什么递归看起来会忽略操作数错误。例如,我知道您不能将整数添加到列表中,并且我知道以下内容无法执行:

>>> 1 + [2,3]

这将并且应该产生不受支持的操作数类型错误。

但是,当传递以下代码 [1,2,3] 时,它会执行而不会失败:

def list_sum_recursive(input_list):
    # Base case
    if input_list == []:
        return 0

    # Recursive case
    else:
        head = input_list[0]
        smaller_list = input_list[1:]
        return head + list_sum_recursive(smaller_list)

输出为 6,这对于列表中元素的总和是正确的,但是当我尝试绘制堆栈时,我看到的只是一个 int + list 堆栈,在我看来我知道应该抛出一个错误。关于列表如何在递归中工作,我没有得到什么?谁能向我解释为什么这段代码执行时没有抛出错误?

标签: pythonrecursion

解决方案


你感到困惑的那条线一定是return head + list_sum_recursive(smaller_list). 你是对的,如果 head 是一个int并且递归调用返回的另一个对象是一个列表,这将是有问题的 - 但是,问问你自己,你的函数在什么时候返回一个列表?您的函数可以返回 0(基本情况),也可以返回 head + some int。


推荐阅读