1.定义:
1.1 递归,就是方法本身去调用自己的一个副本来求解小问题来最后求解一个大问题,递归会产生很多副本,所以确保递归终止非常重要,也就是要有递归终止条件。
1.2 递归每调用自己一次,都会使问题更简单一点,不断的缩小问题序列最终能够收敛到一种基本情况(也就是非常容易解出来的简单问题)
1.3 递归成立的条件是一个问题是可以被分解为多个相似的小问题,循环语句被编译的时候就会转换为递归的函数形式来处理
1.4 常用递归解决的问题有:排序问题,搜索问题,遍历问题。
2.算法分类:
2.1.DFS算法 2.1.1定义:深度优先算法,本质上是树,以根为出发,要把所有可能循环出来或者到达结点了回溯回来分叉的地方。 其实就是要暴力枚举出所有可能性,然后来得到我们想要的数据。 2.1.2做法: a.构建递归函数,包括参数 b.找到边界,递归结束的条件 c.列出所有可能或者变化的路径 2.1.3代码: dfs(int step,。。。){ if(走不下去,到达边界) //操作 } if(满足条件1)dfs(step+1,、、、) if(满足条件2)dfs(step+1,、、、) 2.1.4例题: 李白打酒,第39阶台阶 蓝桥杯的粘木棍和车的放置,
2.2.BFS算法
参考视频:
https://www.bilibili.com/video/BV1H44y1871A/?spm_id_from=autoNext
3.算法流程框架:
树是同样的树,但是根据使用的是栈还是队列,决定遍历的顺序而已。
3.1DFS有两种写法
一种是栈,一种是递归
递归的方式:
3.2两者的区别
也就是栈有特性,如果1开始,它的出处有3,和2,3先于2进栈的话,那么2就要滚蛋,然3遍历完所有的子节点先,再回溯到2遍历它所有的子节点。