递归是那种「看别人写觉得不难,自己动手就卡住」的东西。你能看懂汉诺塔的解法,也能背出二叉树前序遍历的三行代码,但一到自己设计递归函数,边界条件就写不对,返回值不是多了就是少了,栈溢出了也不知道问题出在哪。这门课针对的就是这种状态——不是零基础入门,而是帮你把已经会一点的递归真正理顺。
先确认一下你是不是真的需要补这一块
下面几种情况,如果中了两个以上,这门课的九讲内容对你就有直接作用:
- 写递归时习惯先想「循环怎么写」,再硬套成递归,结果写出来的东西既不自然也不好调试;
- 知道递归要有终止条件,但终止条件经常写在错误的位置,或者漏掉某些分支;
- 遇到「单向递归」之外的场景就发懵——比如一个函数里调用自己两次、三次该怎么分析;
- 分治、回溯、树的遍历这些词都听过,但说不清它们和递归之间的具体关系;
- 面试被问到「递归和循环的取舍」时,只能答出「递归简洁但费栈」这种一句话结论。
如果这些描述让你有点不舒服,那说明缺口是真实存在的。这门课的价值不在于教你会写递归,而在于让你在写之前就知道自己写的是什么形状的递归。
九讲安排里,哪些是多数人的薄弱环节
课程把递归拆成九个主题,覆盖单向、双向、多向三种调用形态。多数人最熟的是单向递归——一个函数只调用自己一次,比如阶乘、链表遍历。这部分不用花太多时间。
真正容易出问题的是双向和多向递归。双向递归里,一次调用会分裂成两个子问题,典型场景就是二叉树的遍历和分治。多向递归则更复杂,一次调用可能产生多个分支,回溯类问题基本都落在这一块。课程用二叉树遍历、分治作为例子的用意很明确:这两个场景是双向递归最干净的载体,把这里的调用树画清楚了,再去看更复杂的多分支场景,思路是连贯的。
另一个容易被跳过的是非递归写法。很多人觉得递归能解决问题就够了,但把递归改写成迭代,恰恰是检验你到底有没有理解调用过程的最好方式。课程专门涉及这部分,对调试和面试都有实际帮助。
配套练习和看完应该能回答的问题
每讲之后建议至少手写两到三个递归函数,不要只在脑子里过。具体可以按这个顺序推进:先写单向前进型的递归,再写需要「回来」做事的递归(比如后序遍历),最后写一个分治或回溯的小例子。写的过程中强制自己画出调用树,标出每一层的参数和返回值。
学完之后,你应该能不查资料回答下面这些问题:
- 一个递归函数的终止条件应该满足什么标准,才能保证既不漏分支也不死循环?
- 双向递归的调用过程画成树之后,时间复杂度怎么从树的形状读出来?
- 同样是遍历二叉树,前序、中序、后序在递归结构上的区别到底体现在哪一行代码的位置?
- 把一段递归改写成用栈的迭代版本,关键要保存哪些信息?
- 分治和普通递归的差别,是在调用方式上还是在问题划分上?
这五个问题答不顺畅,说明对应的那一讲需要回头看第二遍。答得顺畅,递归这块基本可以往下推进更复杂的算法主题了。
递归九讲2025
课程详情
课程标题:递归九讲2025
本课程旨在帮助学员掌握“递归”这种算法思维基础,攻破程序设计中思维难点。
适合人群
- 对编程有兴趣,希望提升算法能力的初学者
- 有一定编程基础,希望深入理解递归原理的开发者
- 准备参加编程竞赛或求职面试的学员
学习收获
- 理解递归的基本概念和原理
- 掌握递归在解决实际问题中的应用
- 提高算法设计和编程能力
课程亮点
- 系统讲解递归九大主题,涵盖单向、双向、多向递归
- 对比递归与循环,深入理解递归的妙用
- 结合二叉树遍历、分治等实例,强化递归应用
- 涵盖非递归方法,拓展算法视野





