【递归和搜索】前言

递归:函数自己调用自己

为什么要用到递归:

递归的本质:处理最开始问题的逻辑和处理后面的问题的逻辑是相同的

  主问题 --> 相同的子问题

  子问题 --> 相同的子问题

如何理解递归?

1.递归展开的细节图

2.二叉树中的题目

3.宏观看代递归的过程

  3.1不要在意递归的细节展开图

  3.2 把递归的函数当作一个黑盒  --> 不关注具体的操作

  3.3相信这个黑盒一定能完成这个任务

4.如何写好一个递归?

 4.1先找到相同的子问题  --> 函数头的设计、

 4.2只关注子问题的具体实现 --> 函数体的实现

 4.3注意一下递归函数的出口

深度优先遍历 vs 深度优先搜索(dfs)

遍历是形式,目的是为了搜索

宽度优先遍历vs 宽度优先搜索(bfs)

搜索就是将所有的情况都暴力枚举一遍

回溯

回溯的本质就是深搜

解决迷宫问题

从起始点开始走,只要遇到路口, 所有方式都走一遍。当发现走到死路之后,就回退到上一步(其实这就是回溯,回退的操作就是回溯)

剪枝:比如在迷宫问题中,当我们走到死路之后,回退到上一个路口,这时候就可以排除刚刚走过的路口。排除掉了一个错误,这就是剪枝。之前通过这个路口有两种可能的走法,但是我选择了一种发现走到死路之后,再次回来之后,就可以回退到这个路口,并且减少一种可能性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值