1 递归
1.1 什么是递归?
函数自己调用自己的情况
1.2 为什么会用到递归?
本质:
主问题 -> 相同子问题
子问题 -> 相同子问题
1.3 如何理解递归?
- 递归展开的细节图
- 宏观看待递归的过程
- 不要在意递归的细节展开图
- 把递归的函数当成一个黑盒
- 相信这个黑盒一定能完成这个任务
1.4 如何写好一个递归?
- 先找到相同的子问题!!! -> 函数头的设计
- 只关心某一个子问题是如何解决的 -> 函数体的书写
- 注意一下递归函数的出口即可
2 搜索 vs 深度有限遍历 vs 深度优先搜索 vs 宽度有限遍历 vs 宽度优先搜索 vs 暴搜
2.1 遍历是形式,目的是搜索
深度优先遍历 vs 深度优先搜索 -> dfs 宽度优先遍历 vs 宽度优先搜索 -> bfs
2.2 拓展搜索问题
全排列
树状图
3 回溯与剪枝
本质:dfs