08 递归与分治 — 思维方式的跃迁(⚠️ 人工关注)
李永乐式比喻:
- 递归 = 俄罗斯套娃。打开最大的娃,发现里面有个小的;打开小的,里面还有个更小的……一直到最小的那个(终止条件)。然后把它们一个一个装回去(返回)。
- 汉诺塔 = 把 A 柱上的 N 个盘子移到 C 柱。思考方式:如果我能先把上面 N-1 个盘子移到 B 柱,剩下就简单了——把最大的盘子移到 C 柱,再把 N-1 个从 B 移到 C。关键是——怎么移 N-1 个?同样的方法。
名词映射
| 英文 | 中文 | 本质 | 比喻 |
|---|---|---|---|
| Recursion | 递归 | 函数调用自身 | 俄罗斯套娃 |
| Base Case | 基本情况 | 递归的终止条件 | 最小的那个娃(不再能打开) |
| Recursive Case | 递归情况 | 分解为更小的问题 | 打开娃,处理里面的小娃 |
| Divide and Conquer | 分治 | 分->解->合三步 | 大任务拆成小任务分别完成再汇总 |
| Call Stack | 调用栈 | 递归函数的调用层级 | 俄罗斯套娃的堆叠顺序 |
汉诺塔的递归拆解
递归的执行过程(阶乘 factorial(3))
企业场景
- 文件目录遍历:递归遍历每个子目录
- JSON 解析:嵌套的 JSON 需要递归处理
- 树形数据渲染:组织架构图、评论区嵌套
- 分治在分布式中的应用:MapReduce(归并排序的分布式版本)
递归 vs 迭代
AI 协作
AI 生成:
- 汉诺塔递归实现 -- 6 行代码
- 任意递归转迭代 -- 用栈模拟
- 分析递归的时间/空间复杂度(含调用栈深度)
人类决策:
- 这个问题能分解为相同结构的子问题吗?是则递归
- 递归深度确定吗?不确定则用迭代
- 分治的合并步骤是瓶颈吗?