Python递归函数详解:基础求和与嵌套列表处理

周叙
周叙
发布时间:2026-10-13| 5人浏览过
原创

本文深入解析Python中的递归函数,通过基础求和与嵌套列表处理两个实例,展示递归在遍历未知结构时的优势。文章详细解释了递归出口、局部作用域及调用栈机制,并对比了递归与循环的实现逻辑,帮助读者掌握递归的核心概念与应用场景。

递归函数概述

概述

递归函数是指直接或间接调用自身的函数。在递归执行过程中,必须设定一个明确的终止条件,即递归出口,以确保程序不会无限循环。递归的一个显著优势在于其能够遍历任意且不可预知的程序结构,例如处理复杂的嵌套列表等深层数据结构。

基础递归求和实现

递归求和

我们可以利用递归函数来模拟实现Python内置函数sum()的功能。


# 递归
def d_sum(L):
  if not L:
    return 0
  else:
    return L[0] + d_sum(L[1:])

sum_l = d_sum(range(10))
print(sum_l)

示例结果

45

该递归函数是如何实现列表元素相加的呢?我们知道函数具有本地作用域,每次调用函数时,都会在运行时调用堆栈上创建一个新的本地作用域副本。这意味着在递归的每一层,局部变量L都是独立的。例如,我们可以通过在每次调用时添加打印语句,直观地展示每一层局部变量L的状态变化。


# 递归
def d_sum(L):
  # 打印该层级L
  print(L)
  if not L:
    return 0
  else:
    return L[0] + d_sum(L[1:])
# 构建 0-10 数字元素列表
L = [i for i in range(10)]
sum_l = d_sum(L)
print(sum_l)

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9] [1, 2, 3, 4, 5, 6, 7, 8, 9] [2, 3, 4, 5, 6, 7, 8, 9] [3, 4, 5, 6, 7, 8, 9] [4, 5, 6, 7, 8, 9] [5, 6, 7, 8, 9] [6, 7, 8, 9] [7, 8, 9] [8, 9] [9] [] 45

处理任意嵌套结构

处理任意结构

例如,我们可以利用递归计算嵌套子列表结构中所有数字的总和。


def dd_sum(L):
  tot = 0
  for x in L:
    if not isinstance(x, list):
      tot += x
    else:
      tot += dd_sum(x)
  return tot

# 嵌套列表
L = [1,[2,3],[4,[5,6,7],8],9]
sum_l = dd_sum(L)
print(sum_l)

示例结果:

45

这种处理方式看似复杂,我们可能更多会利用循环语句替代,但是使用递归函数逻辑简单清晰,这是使用的一大优点。

总结

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对本站的支持。

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。