递归、搜索与回溯算法概要

彼此之间关系解释:回溯包含在搜索中、而搜索包含在递归中

名词解释

一、递归

1.1、什么是递归?

根据之前所学,可以知道递归实际上就是函数自己调用自己的情况

例如二叉树的遍历,快排、归并

1.2、为什么会用到递归?

这是因为这个问题的解决方式是一个一个子问题的解决方式合起来的,而且这些个子问题的解决方式相同。因此可以用到递归

1.3、如何理解递归?

这个根据自身所学可以分为三个阶段

第一阶段初学,理解递归的方式就是画出递归展开图

第二阶段学到数据结构二叉树时,理解递归不再过度依赖递归展开图

第三阶段就是现在,应该如何理解递归

要去宏观的看待递归,不关心递归展开图。而是先分析递归函数如何写,之后将这个递归函数当作一个黑盒。并且大胆传入递归部分,相信这个黑盒一定能够完成任务

例如二叉树的后序遍历以及归并排序递归写法

将递归函数dfs当作一个黑盒,首先弄清这个函数的作用就是后序遍历此根节点及其下所有子节点,那么处理根节点的左右子树时,就可以将左右子树传入递归函数(当作黑盒),相信其一定可以完成左右子树的后序遍历

归并排序,首先分析子问题就是将每一个区间内数据排序,排序的方式就是先分为两部分将这两部分排为各自有序之后再合起来整体有序。那么每一个区间都可以这样处理,这就是相同的子问题,并且merge函数当作黑盒大胆传入细分之后的区间

1.4、如何写好一个递归

写出某一个子问题的递归函数,将细分的部分在这个函数内调用,也就是自己调用自己之后注意一下递归函数返回条件即可,不能无限递归


二、搜索

2.1、搜索中出现的名词解释

解释在搜索这部分出现的一些名词:宽度优先遍历、宽度优先搜索、深度优先遍历、深度优先搜索、暴搜

宽度优先遍历就是bfs、深度优先遍历就是dfs

至于深度优先搜索和宽度优先搜索实际上就是在各自遍历中找到某些或者某一个有限个数据;可以说遍历是一种方式,而搜索才是一种目的

暴搜:暴力枚举一遍所有情况,实际上就是bfs和dfs

2.2、搜索扩展------决策树

像这种全排列问题,在中学阶段这种图叫树状图,现在叫决策树,在之后的问题中决策树要先画出来,之后根据决策树写递归代码


三、回溯与剪枝

回溯的本质就是深搜

就看这个迷宫问题,找出口。从起点开始深度优先遍历,碰到墙壁不能走了就应回溯到分叉点,所以可以说回溯就是深搜,只有深搜了才会有回溯

相关推荐
_OP_CHEN15 分钟前
【算法基础篇】(五十七)线性代数之矩阵乘法从入门到实战:手撕模板 + 真题详解
线性代数·算法·矩阵·蓝桥杯·c/c++·矩阵乘法·acm/icpc
天天爱吃肉821820 分钟前
【跨界封神|周杰伦×王传福(陶晶莹主持):音乐创作与新能源NVH测试,底层逻辑竟完全同源!(新人必看入行指南)】
python·嵌入式硬件·算法·汽车
im_AMBER20 分钟前
Leetcode 114 链表中的下一个更大节点 | 删除排序链表中的重复元素 II
算法·leetcode
xhbaitxl33 分钟前
算法学习day38-动态规划
学习·算法·动态规划
多恩Stone33 分钟前
【3D AICG 系列-6】OmniPart 训练流程梳理
人工智能·pytorch·算法·3d·aigc
历程里程碑36 分钟前
普通数组----轮转数组
java·数据结构·c++·算法·spring·leetcode·eclipse
pp起床37 分钟前
贪心算法 | part02
算法·leetcode·贪心算法
sin_hielo37 分钟前
leetcode 1653
数据结构·算法·leetcode
2501_9011478339 分钟前
面试必看:优势洗牌
笔记·学习·算法·面试·职场和发展
李日灐40 分钟前
C++进阶必备:红黑树从 0 到 1: 手撕底层,带你搞懂平衡二叉树的平衡逻辑与黑高检验
开发语言·数据结构·c++·后端·面试·红黑树·自平衡二叉搜索树