python - 列表如何在 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 堆栈,在我看来我知道应该抛出一个错误。关于列表如何在递归中工作,我没有得到什么?谁能向我解释为什么这段代码执行时没有抛出错误?
解决方案
你感到困惑的那条线一定是return head + list_sum_recursive(smaller_list)
. 你是对的,如果 head 是一个int
并且递归调用返回的另一个对象是一个列表,这将是有问题的 - 但是,问问你自己,你的函数在什么时候返回一个列表?您的函数可以返回 0(基本情况),也可以返回 head + some int。
推荐阅读
- scala - intellij scala:错误:找不到或加载主类
- java - 为什么不调用 Cleaner 操作?
- r - 如何将相同的功能应用于 R 中的多个文件
- java - 如何在while循环中添加或函数
- javascript - 如何在标签元素内的文本旁边添加新文本
- c# - 如何通过 C# 修复更新文档 mongoDb 中的冻结?
- sql-server - 文件表为“stream_id”列插入了重复键
- google-cloud-dataflow - RexCall 无法在 Apache Beam SQL 中转换为 RexInputRef 异常
- java - 如何将一堆布尔值转换为字节值?
- c# - 如何获取网络摄像头捕获的picturebox图像路径