Skip to content

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 行代码
  - 任意递归转迭代 -- 用栈模拟
  - 分析递归的时间/空间复杂度(含调用栈深度)

人类决策:
  - 这个问题能分解为相同结构的子问题吗?是则递归
  - 递归深度确定吗?不确定则用迭代
  - 分治的合并步骤是瓶颈吗?

OPC 超级个体实战指南