递归、搜索与回溯算法介绍

102 阅读1分钟

1 递归

1.1 什么是递归?

函数自己调用自己的情况

1.2 为什么会用到递归?

本质:

主问题 -> 相同子问题

子问题 -> 相同子问题 image.png

image.png

1.3 如何理解递归?

  • 递归展开的细节图
  • 宏观看待递归的过程
    • 不要在意递归的细节展开图
    • 把递归的函数当成一个黑盒
    • 相信这个黑盒一定能完成这个任务

1.4 如何写好一个递归?

  • 先找到相同的子问题!!! -> 函数头的设计
  • 只关心某一个子问题是如何解决的 -> 函数体的书写
  • 注意一下递归函数的出口即可

2 搜索 vs 深度有限遍历 vs 深度优先搜索 vs 宽度有限遍历 vs 宽度优先搜索 vs 暴搜

2.1 遍历是形式,目的是搜索

深度优先遍历 vs 深度优先搜索 -> dfs 宽度优先遍历 vs 宽度优先搜索 -> bfs

image.png

2.2 拓展搜索问题

全排列

image.png

树状图

image.png

3 回溯与剪枝

本质:dfs

image.png