讲师中心 微信公众号
AI工具推荐 视频效率加速

Python递归函数教程_设计思想与应用场景实战

阿明君_3608

阿明君_3608

发布时间:2026-01-05 17:27:09

|

806人浏览过

|

来源于php中文网

原创

递归函数是Python中通过自身调用解决可分解为更小同类子问题的编程方法,关键在于明确终止条件和问题规模缩减;如阶乘中n! = n × (n−1)!,base case为n==0或1,recursive case需确保输入趋近终止条件。

python递归函数教程_设计思想与应用场景实战

递归函数是Python中一种用函数自身调用自身来解决问题的编程技巧。它不是炫技,而是对“问题可分解为更小同类子问题”这一现实逻辑的自然表达。写好递归,关键不在语法,而在准确识别“分解规则”和“终止条件”。

递归的两个必要条件:终止条件与自我缩减

没有终止条件的递归会无限调用,最终触发RecursionError: maximum recursion depth exceeded。而每次递归调用,输入必须向终止条件靠近——也就是“问题规模变小”。比如计算阶乘:n! 可以拆成 n × (n−1)!,子问题 (n−1)! 的规模比原问题小1,且当 n == 0n == 1 时直接返回1,这就是终止条件。

  • 写递归前先问自己:这个问题最小、不可再分的情况是什么?(即 base case)
  • 再问:当前问题怎么用一个更小的同类型问题表示?(即 recursive case)
  • 避免在递归调用中修改全局变量或共享状态,否则容易逻辑错乱

经典实战:遍历嵌套列表与JSON-like结构

当数据存在任意深度的嵌套(如[1, [2, 3], [[4]], 5]),用循环逐层展开很麻烦;递归则简洁直观。核心思路是:遇到数字就收集,遇到列表就递归处理。

def flatten(lst):
    result = []
    for item in lst:
        if isinstance(item, list):
            result.extend(flatten(item))  # 递归处理子列表
        else:
            result.append(item)
    return result

这个模式同样适用于解析API返回的嵌套字典(如带"children"键的树形菜单)、读取文件系统目录树等场景。

立即学习Python免费学习笔记(深入)”;

jm-jsjkxyjs02-pzl-803
jm-jsjkxyjs02-pzl-803

查询全球任意城市的实时天气和未来天气预报

下载

小心陷阱:重复计算与栈溢出

斐波那契数列是递归入门例子,但朴素实现效率极低:

def fib(n):  # ❌ 指数级时间复杂度
    if n <= 1:
        return n
    return fib(n-1) + fib(n-2)

因为fib(5)会重复计算fib(3)多次。实际项目中应改用记忆化(@lru_cache)或转为迭代。另外,默认递归深度限制约1000层,处理深层嵌套数据时需谨慎:

  • sys.setrecursionlimit(3000)可临时提高限制(不推荐盲目调高)
  • 对超深结构,优先考虑显式栈(list模拟)+ 循环的迭代写法
  • try/except RecursionError做兜底,提示用户数据可能异常

适合递归的真实应用场景

不是所有循环都能/都应该改写成递归。以下场景天然契合递归思维:

  • 树与图的遍历:二叉树的前/中/后序遍历、目录结构扫描、网页链接爬取(注意去重与深度控制)
  • 分治算法:归并排序、快速排序、找数组最大值(分半递归求各自最大,再比较)
  • 回溯搜索:八皇后、数独求解、全排列生成——每步试探,失败则退回上层继续尝试
  • 数学定义直接映射:汉诺塔移动步骤、组合数 C(n,k)、正则表达式引擎内部匹配逻辑

递归的价值在于让代码更贴近问题本质,而不是追求形式上的“简洁”。能清晰表达“怎么分解”和“何时停止”,递归就立住了。

热门AI工具

更多
VibeKnow
VibeKnow Hot

一款AI视频创作工具,主要用于全球首个AI知识视频创作平台,文档、文章、网页,一键生成视频,适合需要提升相关任务效率的用户。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

音述AI
音述AI Hot

一款AI音频处理工具,主要用于音述AI是一个以“用声音述说故事”为核心的 AI 音乐创作与声音分享社区,适合需要提升相关任务效率的用户。

Loomy
Loomy Hot

一款AI工具,主要用于科大讯飞发布的桌面级 AI 助理,比 OpenClaw 更易用、更安全!,适合需要提升相关任务效率的用户。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

讯飞绘文

讯飞绘文是一款由科大讯飞推出的一站式 AIGC 内容运营平台。

咔片AIPPT

一款在线AI演示文稿制作工具,可根据主题和内容需求辅助生成PPT结构与页面,提高演示材料制作效率。

UP简历
UP简历 Hot

一款AI办公效率工具,主要用于基于AI技术的免费在线简历制作工具,适合需要提升相关任务效率的用户。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

相关专题

更多
json数据格式
json数据格式

JSON是一种轻量级的数据交换格式。本专题为大家带来json数据格式相关文章,帮助大家解决问题。

1955

2023.08.07

json是什么
json是什么

JSON是一种轻量级的数据交换格式,具有简洁、易读、跨平台和语言的特点,JSON数据是通过键值对的方式进行组织,其中键是字符串,值可以是字符串、数值、布尔值、数组、对象或者null,在Web开发、数据交换和配置文件等方面得到广泛应用。本专题为大家提供json相关的文章、下载、课程内容,供大家免费下载体验。

2602

2023.08.23

jquery怎么操作json
jquery怎么操作json

操作的方法有:1、“$.parseJSON(jsonString)”2、“$.getJSON(url, data, success)”;3、“$.each(obj, callback)”;4、“$.ajax()”。更多jquery怎么操作json的详细内容,可以访问本专题下面的文章。

896

2023.10.13

go语言处理json数据方法
go语言处理json数据方法

本专题整合了go语言中处理json数据方法,阅读专题下面的文章了解更多详细内容。

2919

2025.09.10

js正则表达式
js正则表达式

php中文网为大家提供各种js正则表达式语法大全以及各种js正则表达式使用的方法,还有更多js正则表达式的相关文章、相关下载、相关课程,供大家免费下载体验。

3756

2023.06.20

正则表达式不包含
正则表达式不包含

正则表达式,又称规则表达式,,是一种文本模式,包括普通字符和特殊字符,是计算机科学的一个概念。正则表达式使用单个字符串来描述、匹配一系列匹配某个句法规则的字符串,通常被用来检索、替换那些符合某个模式的文本。php中文网给大家带来了有关正则表达式的相关教程以及文章,希望对大家能有所帮助。

2241

2023.07.05

java正则表达式语法
java正则表达式语法

java正则表达式语法是一种模式匹配工具,它非常有用,可以在处理文本和字符串时快速地查找、替换、验证和提取特定的模式和数据。本专题提供java正则表达式语法的相关文章、下载和专题,供大家免费下载体验。

6042

2023.07.05

java正则表达式匹配字符串
java正则表达式匹配字符串

在Java中,我们可以使用正则表达式来匹配字符串。本专题为大家带来java正则表达式匹配字符串的相关内容,帮助大家解决问题。

772

2023.08.11

Buffalo框架数据库开发全教程
Buffalo框架数据库开发全教程

本专题围绕Buffalo框架数据库开发,讲解database.yml多环境配置、soda与fizz迁移生成回滚、模型结构体标签、增删改查与条件查询、一对多与多对多关联、数据校验、回调钩子、事务处理及原生SQL执行能力。

0

2026.09.23

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn