编程基础篇 · AI 背后的算法

递归:把大事拆成同一件小事

遍历目录、拆解任务、画分形树,套路都一样:自己调用自己。看 Agent 怎么把「做个官网」递归拆成能动手的小任务

本页解决的问题

先给结论

「递归:把大事拆成同一件小事」要解决的关键问题是什么?

遍历目录、拆解任务、画分形树,套路都一样:自己调用自己。看 Agent 怎么把「做个官网」递归拆成能动手的小任务

判断标准

让这个结论先证明自己值得留下。 把这一页当成决策工具,而不是需要背下来的定义。把概念连到一个真实任务、一个可观察结果,以及一个能改变你判断的失败上。

下一步

写下一个问题:试完这个方法后,你能用什么证据回答它?

常见误区

结论听起来很完整,却没有检查最关键的假设。

先玩一局 · 帮 Agent 拆任务

老板丢来一句话:「给奶茶店做个官网」。这活没法直接动手——但可以。点下面的卡片,把大任务一层层拆开;拆到✋「能直接干了」的小活为止,再点「开工」。留意两件事:拆的时候是自上而下一层层展开;干完的时候,绿色是自下而上「冒泡」汇拢回去的。

先点最上面的大任务,把它拆开
发现没有?「做官网」和「做首页」其实是同一种问题——只是规模更小。拆「做官网」的方法(分成几块、每块继续拆)原封不动地用在了「设计页面」上。用同一套办法处理越拆越小的同一类问题,这就是递归。Agent 拆任务、程序遍历文件夹(文件夹里还有文件夹)、公司层层分派 KPI,全是这一个套路。
再看一眼 · 一条规则画一棵树

递归最神奇的地方是:规则只有一条,结果可以无限复杂。下面这棵树的全部说明书就一句话(写在图下方)。拖动滑块加深「拆解层数」,留意:每根新枝都是上一根的缩小版——规则从头到尾没变过,变的只是规模。

🌱 全部规则:画一根枝,在末端分两杈,每一杈是「缩小版的自己」——回到本条规则开头。
2 层 共 3 根枝
「自己调用自己」就是这个意思。「画一根枝」这条规则的最后一步,是再执行一遍「画一根枝」。程序里递归函数长得一模一样:函数体的最后一行调用它自己,只是传进去的问题更小了。8 层就是 255 根枝——一条规则,一棵大树。
概念卡 · 递归三件套

刚才两个演示里藏着递归的全部三个要件。以后你看任何递归,就用这三条验收:

1

同样的事

「做官网」和「做首页」是同一类问题,能用同一套拆法。要是拆出来的子问题完全是另一码事,递归就用不上了。

2

规模更小

每拆一层,问题必须变小一圈:官网 → 三个板块 → 一个页面。分形树的每一杈也比上一根短。不变小,就永远拆不完。

3

终止条件

拆到✋「能直接干了」的叶子就得停。这一条最要命——姊妹篇讲栈那课你见过:递归每深一层就在栈上摞一层,没有终止条件就是爆栈(Stack Overflow)

和 AI 的关系再点透一层:你让 Agent「重构整个项目」,它先列出子任务,发现「重构登录模块」还是太大,就继续往下拆——直到每一项都是「改一个文件」这种能直接执行的动作。判断「够小了、能动手了」的那一刻,就是它的终止条件。下一课你会看到,把「拆开的结果再回来」,正是上下文压缩 Compaction 的原理。

「先玩一局 · 帮 Agent 拆任务」里的算法代价曲线

「老板丢来一句话:「给奶茶店做个官网」。这活没法直接动手——但可以 拆 。点下面的卡片,把大任务一层层拆开;拆到✋「能直接干了」的小活为止,再点「开工」。」真正训练的不是背诵步骤,而是识别重复工作:输入变大时,程序到底多做了多少次比较、移动或递归。

先找重复工作,再谈快慢

「递归最神奇的地方是: 规则只有一条,结果可以无限复杂 。下面这棵树的全部说明书就一句话(写在图下方)。拖动滑块加深「拆解层数」, 留意 :每根新枝都是上一根的缩小版——规则从头到尾没变过,变的只是规模」可以拆成输入规模、每轮做什么、以及是否能缩小下一轮范围三个问题。Big-O 是描述增长趋势的语言,不是对每台机器的精确计时;常数、内存和真实数据分布也会影响最终结果。

  • 递归 = 同构拆解 :用同一套办法,处理越拆越小的同一类问题
  • 拆是自上而下,成果自下而上汇拢 :叶子干完,绿色一路冒泡回根
  • 三件套缺一不可 :同样的事、规模更小、终止条件

别把理论最优当成无条件最优

面对 AI 写出的算法,先用小输入手算一遍,再用逐渐放大的数据做基准测试。这样才能把「拆到✋「能直接干了」的叶子 就得停 。这一条最要命——姊妹篇讲栈那课你见过:递归每深一层就在栈上摞一层, 没有终止条件就是爆栈(Stack Overflow)」从一句结论变成可检查的性能判断。

从「先玩一局 · 帮 Agent 拆任务」走到「再看一眼 · 一条规则画一棵树」

「先玩一局 · 帮 Agent 拆任务」先把问题落在「老板丢来一句话:「给奶茶店做个官网」。这活没法直接动手——但可以 拆 。点下面的卡片,把大任务一层层拆开;拆到✋「能直接干了」的小活为止,再点「开工」。 留意两件事 :拆的时候是自上而下一层层展开;干完的时候,绿色是自下而上「冒泡」汇拢回去的」上;到了「再看一眼 · 一条规则画一棵树」,讨论继续推进到「递归最神奇的地方是: 规则只有一条,结果可以无限复杂 。下面这棵树的全部说明书就一句话(写在图下方)。拖动滑块加深「拆解层数」, 留意 :每根新枝都是上一根的缩小版——规则从头到尾没变过,变的只是规模」。两段连起来,重点就不只是记住一个结论,而是看清它成立所依赖的条件。

把这条判断带到下一个场景

算法题换成真实任务后,先找出重复工作,再问输入规模如何变化,最后用一个小基准验证理论判断。这样不会把复杂度记成脱离场景的标签。

  • 「先玩一局 · 帮 Agent 拆任务」:老板丢来一句话:「给奶茶店做个官网」。这活没法直接动手——但可以 拆 。点下面的卡片,把大任务一层层拆开;拆到✋「能直接干了」的小活为止,再点「开工」。 留意两件事 :拆的时候是自上而下一层层展开;干完的时候,绿色是自下而上「冒泡」汇拢回去的
  • 「再看一眼 · 一条规则画一棵树」:递归最神奇的地方是: 规则只有一条,结果可以无限复杂 。下面这棵树的全部说明书就一句话(写在图下方)。拖动滑块加深「拆解层数」, 留意 :每根新枝都是上一根的缩小版——规则从头到尾没变过,变的只是规模
  • 「最后的要点」:Agent 拆任务、遍历目录、分形树 ,全是递归的日常真身

最后的「最后的要点」把讨论落到「Agent 拆任务、遍历目录、分形树 ,全是递归的日常真身」。回看这条线索时,最值得保留的是:当输入、规模或风险改变,哪些判断需要重新做一遍。

✅ 这一课想和你分享的

  • 递归 = 同构拆解:用同一套办法,处理越拆越小的同一类问题
  • 拆是自上而下,成果自下而上汇拢:叶子干完,绿色一路冒泡回根
  • 三件套缺一不可:同样的事、规模更小、终止条件
  • 没有终止条件 = 爆栈:呼应姊妹篇的栈——递归的每一层都摞在栈上
  • Agent 拆任务、遍历目录、分形树,全是递归的日常真身
标记为已学完 阅读进度会自动记录
← 上一篇下一篇 →

继续阅读

同一条线上的下一篇。

文章讨论

读到这里,留下一个判断。

把刚想明白的地方、还没想通的问题,留给下一位一起学习的人。

正在讨论 递归:把大事拆成同一件小事 AI 背后的算法
3条讨论文章讨论 · 与共学社区同步
在共学社区查看
AM
Asha Morgan内容编辑
观点实践记录

我把这篇文章里的一个判断改写成了今天可以验证的小实验。比记住结论更有用的是,知道下一步要观察什么。

文章讨论7 有帮助
LH
Lin Harper独立开发者
观点观点

读完以后我先回头找它成立的条件,而不是直接把方法搬进项目。这个顺序让后面的取舍清楚很多。

文章讨论5 有帮助
KM
Kiki Moore产品运营
问题问题

如果把这个判断放到真实工作里,最先需要补的约束是什么?我想知道从阅读到第一次实践之间,哪一步最值得先做。

文章讨论4 有帮助