精选文章 - 算法学习第05天|Algorithm Picks

📚 今日算法学习精选

1. 递归与分治(Recursion & Divide and Conquer)

第五天我们来聊算法思想中最重要的递归。几乎所有高级算法都建立在递归之上,不会递归等于不会写算法。

递归(Recursion) 的三要素:

  1. 终止条件(Base Case):什么时候停止,不再调用自己
  2. 递归调用(Recursive Call):把大问题拆成小问题
  3. 状态传递(State Passing):参数如何变化,最终逼近终止条件

分治(Divide and Conquer) 是递归的高级用法:分(拆解)→治(解决子问题)→合(合并结果)。归并排序(Merge Sort)和快速排序(Quick Sort)就是分治的典型代表。

常见错误: 没有终止条件(死循环栈溢出)、递归深度过大(Java默认栈深度约1000)、重复计算相同子问题(可以用记忆化递归/Memoization优化)。

2. 推荐资源

  • 递归可视化https://recursion.visualizity.com(或搜索Python Tutor)
  • LeetCode hot100 递归专题 — 刷到能默写就是真懂了
  • 记忆化递归(Memoization)— 用字典缓存计算结果,$O(n)$ 变 $O(1)$,这是动态规划的第一步

3. 训练方法

从树(Tree)和图(Graph)的遍历开始练递归。每画一次递归调用树(Recursion Tree),你就会对问题的分解方式有更深的理解。递归不是玄学,是”自己调用自己”——就这么简单。


递归是算法的灵魂,理解它就理解了问题的自我分解之道!