【递归、搜索与回溯】-- 基本介绍
1. 递归
1. 什么是递归?
函数自己调用自己。
2. 为什么会用到递归
本质:在解决主问题时----需要解决相同的子问题----在解决子问题时------需要解决相同的子问题…
3. 如何理解递归
- 递归展开的细节图
- 二叉树种的题目
- 宏观看待递归的过程
- 不要在意递归的细节展开图
- 把递归的函数当成一个黑盒
- 相信这个黑盒一定能完成这个任务
4. 如何写好一个递归?
- 先找到相同的子问题!!!!----> 函数头的设计
- 只关心某一个子问题是如何解决的---->函数体的书写
- 注意一下递归的出口,避免写成死循环
2. 搜索vs深度优先遍历vs深度优先搜索vs宽度优先遍历vs宽度优先搜索vs暴搜
1. 对比
深度优先遍历 == 深度优先搜索(dfs)
宽度优先遍历 == 宽度优先搜索(bfs)
遍历是形式,目的是搜索
2. 关系图
暴力枚举一遍所以的情况。
3. 拓展搜索问题
全排列:1,2,3
3. 回溯与剪枝
本质:深搜