編程基礎篇 · 遞歸與分治
遞歸:把大事拆成同一件小事
「做個官網」聽着嚇人,「寫首頁的三行文案」誰都會。工程進階篇裏你見過 Coding Agent 接到大需求後自己列小任務清單——它用的思路有個名字:遞歸。這一課不寫一行程式碼,點一棵任務樹、拖一根滑塊,你就能拿到這個程序員嘴裏最玄的詞。
先玩一局 · 幫 Agent 拆任務
老闆丟來一句話:「幫奶茶店整個官網」。這活沒法直接動手——但可以拆。點下面的卡片,把大任務一層層拆開;拆到✋「可以直接做」的小活為止,再點「開工」。留意兩件事:拆的時候是自上而下一層層展開;幹完的時候,綠色是自下而上「冒泡」匯攏回去的。
先點最上面的大任務,把它拆開
發現沒有?「做官網」和「做首頁」其實是同一種問題——只是規模更小。拆「做官網」的方法(分成幾塊、每塊繼續拆)原封不動地用在了「設計頁面」上。用同一套辦法處理越拆越小的同一類問題,這就是遞歸。Agent 拆任務、程式遍歷資料夾(資料夾裏還有資料夾)、公司層層分派 KPI,全是這一個套路。
再看一眼 · 一條規則畫一棵樹
遞歸最神奇的地方是:規則只有一條,結果可以無限複雜。下面這棵樹的全部説明書就一句話(寫在圖下方)。拖動滑塊加深「拆解層數」,留意:每根新枝都是上一根的縮小版——規則從頭到尾沒變過,變的只是規模。
🌱 全部規則:畫一根枝,在末端分兩杈,每一杈是「縮小版的自己」——回到本條規則開頭。
2 層
共 3 根枝
「自己調用自己」就是這個意思。「畫一根枝」這條規則的最後一步,是再執行一遍「畫一根枝」。程式裏遞歸函式長得一模一樣:函式體的最後一行調用它自己,只是傳進去的問題更小了。8 層就是 255 根枝——一條規則,一棵大樹。
概念卡 · 遞歸三件套
剛才兩個演示裏藏着遞歸的全部三個要件。以後你看任何遞歸,就用這三條驗收:
1
同樣的事
「做官網」和「做首頁」是同一類問題,能用同一套拆法。要是拆出來的子問題完全是另一碼事,遞歸就用不上了。
2
規模更小
每拆一層,問題必須變小一圈:官網 → 三個板塊 → 一個頁面。分形樹的每一杈也比上一根短。不變小,就永遠拆不完。
3
終止條件
拆到✋「能直接幹了」的葉子就得停。這一條最要命——姊妹篇講棧那課你見過:遞歸每深一層就在棧上摞一層,沒有終止條件就是爆棧(Stack Overflow)。
和 AI 的關係再點透一層:你讓 Agent「重構整個項目」,它先列出子任務,發現「重構登入模組」仲係太大,就繼續往下拆——直到每一項都是「改一個檔案」這種能直接執行的動作。判斷「夠細、可以動手」的那一刻,就是它的終止條件。下一課你會看到,把「拆開的結果再合回來」,正是上下文壓縮 Compaction 的原理。
✅ 這一課想和你分享的
- 遞歸 = 同構拆解:用同一套辦法,處理越拆越小的同一類問題
- 拆是自上而下,成果自下而上匯攏:葉子幹完,綠色一路冒泡回根
- 三件套缺一不可:同樣的事、規模更小、終止條件
- 沒有終止條件 = 爆棧:呼應姊妹篇的棧——遞歸的每一層都摞在棧上
- Agent 拆任務、遍歷目錄、分形樹,全是遞歸的日常真身