递归,搜索和回溯算法--介绍

递归在搜索算法中使用方法 最近阅读《算法的乐趣》这本书,书中的例子和作者的思考解题思路都让我很受益,给了我很多启发,于是想针对递归的使用方式,结合一些简单的例子,将自己的一些理解写出来供自己和大家在今后学习和工作中参考。 从斐波那契数列说起 递归是每本算法书中必讲解的内容,也是算法设计中的一类重要的设计思想。在搜索算法设计中,递归方式属于一种暴力搜素方法,即通过计算机的高速运算性能对所有的搜索分支都进行判断,取出符合要求的... 阅读详情

递归

1.什么是递归?

函数自己调用自己的情况

 c语言 + 数据结构 (二叉、快排、归并)

二叉树的后序遍历:

        从根节点开始,先进左子树,再进右子树,到左子树之后重复这个过程,返回之后进右子树重复这个过程,最后遍历根节点。

快速排序:

        找到基准元素之后先向左边排序,再向右边排序,进入左边之后重复这个过程,返回之后进右边重复这个过程,最终整合。

归并排序:

        将一个待排序段分成两份,左边进行归并,右边进行归并,最终整体归并。

2.为什么会用到递归?

本质:

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

..................................

3.如何理解递归?(分成三个层次)

1.递归展开的细节图
2.二叉树中的题目
3.宏观看待递归的过程
        1.不要在意递归的细节展开图                                                                                                               2.把递归的函数当成一个黑盒 
        3.相信这个黑盒一定能完成这个任务  

//伪代码,二叉树后序遍历
void dfs(TreeNode* root)
{
//细节-出口
if(root == nullptr) 
    return;
else
    {

        dfs(root->left);
        dfs(root->right);
        printf(root->val);
    }
}
//伪代码,归并
void merge(nums, int left, int right)
{
//细节-出口
    if(left >= right) 
        return;
    int mid = (left + right) / 2;
    merge(nums, left, mid);
    merge(nums, mid + 1 right);
    //合并两个有序数组
}

4.如何写好一个递归?

1.先找到相同的子问题!!! -> 函数头的设计

2.只关心某一个子问题是如何解决的 -> 函数体的书写 

3.注意一下递归函数的出口即可

搜索 vs 深度优先遍历 vs 深度优先搜索 vs 宽度优先遍历 vs 宽度优先搜索 vs 暴搜

 1.对比

深度优先遍历 vs 深度优先搜索(DFS)
宽度优先遍历 vs 宽度优先搜索(BFS)

                                                        =====》本质上是一致的

遍历是形式,目的是搜索

 2.关系图

暴力枚举一遍所有的情况


搜索(暴搜)=DFS+BFS
  

3.拓展搜索问题
 

全排列问题(树状图结构问题都可以) 

三、回溯与剪枝 

回溯本质就是深搜,就是深搜过程中做了错误的决定,调回到分支处(红色线就相当于回溯)

剪枝就是回到多分支处发现原本其中一条路走过了,不再走了,相当于把它去掉了

四、整合以及规划


专题一:递归
专题二:二叉树中的深搜
专题三: 穷举vs暴搜vs深搜vs回湖vs剪枝
专题四:综合练习
专题五: FloodFill 算法
专题六:记忆化搜索 

感性理解递归搜索(dfs) 递归绝对是我最最最讨厌的东西,没有之一,所以我现在是怀着百感交集的心情在写这篇博客,然而最纠结的是我现在无从下手。 为了表示歉意,我也不知道从哪里开始,就想到什么些什么吧 第一步:理解递归搜索的概念 递归搜索是一个麻烦又复杂的东西,但是却是一个不得不学懂的算法 函数有很多种形式,在搜索中通常是dfs,反正我讲的是dfs,也就是调用自己的函数 要想搜索快,就得学剪枝 搜索不仅仅是搜索,... 阅读详情

相关推荐

数据结构:五种排序,两个查找(递归和非递归)

数据结构中最常见的五种排序附带两个查找

ejfjnxnnd的博客 441

算法——递归与搜索算法

官方一点来说递归指的是一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法。通俗一点来说,递归就是一个函数自己调用自己的过程。

qq_73201597的博客 2118

回溯算法求解数独问题(C++ 递归/非递归)

如何使用求解上述数独? 递归实现 #include<bits/stdc++.h> using namespace std; int sudoku[9][9]; int dx[9]= {-1,-1,-1,0,0,0,1,1,1},dy[9]={-1,0,1,-1,0,1,-1,0,1}; void print(){ for(int i=0;i<9;i++){ for...

Sinclair 3766

递归算法与搜索

一、递归算法 定义: 1、程序直接或间接调运自己的技巧,而直接或间接调用自身的函数称为 递归函数。 2、通常将一个大规模复杂问题层层分化成与原问题相似的小规模问题。 关键点: 将问题向边界条件转化和问题简单化,且寻找递归终止条件,即最简单情况,不可以在使用递归。 做题步骤: 1、分析问题、寻找递归-----缩小问题,公式递归或是循环变化的递归 2、设置边界,控制递归-----return控制结束,...

qq_43627100的博客 770

0027算法笔记——【回溯法】回溯法与装载问题

1、回溯法      (1)描述:回溯法是一种选优搜索法,按选优条件向前搜索,以达到目标。但当探索到某一步时,发现原先选择并不优或达不到目标,就退回一步重新选择,这种走不通就退回再走的技术为回溯法。      (2)原理: 回溯法在问题的解空间树中,按深度优先策略,从根结点出发搜索解空间树。算法搜索至解空间树的任意一点时,先判断该结点是否包含问题的解。如果肯定不包含,则跳过对该结点为根的子树的

liufeng_king的专栏 4万+

使用C语言编写一个在包含字母的2D面板中搜索给定单词的算法并不是一件简单的任务,但是可以通过某些技巧来简化该问题。本文将详细介绍一个使用回溯法和递归函数实现的解...

为了解决这个问题,我们将遍历2D数组中的每个元素作为起点,递归地搜索每个单词。递归过程中需要考虑到已经搜索过的字符,错误的路径需要回溯。在这个示例中,我们使用一个简单的3x3矩阵和一组预定义的单词进行搜索。使用C语言编写一个在包含字母的2D面板中搜索给定单词的算法并不是一件简单的任务,但是可以通过某些技巧来简化该问题。首先,我们需要一个2D数组来表示字母面板,可以使用char类型来存储。接着,我们需要一个字符串数组来存储所有搜索目标单词。总而言之,这个算法是一个寻找特定单词在2D面板中的位置的简单方法。

CyberBladeX的博客 98

【递归、搜索和回溯】递归、搜索和回溯介绍及递归类算法例题

递归VS循环 什么时候用循环舒服?什么时候用递归舒服?递归和循环都是重复子问题,递归和循环之间可以相互转换递归图越复杂,递归就越舒服递归VS深搜递归展开图,其实就是对一棵树做一次深度优先搜索遍历(dfs)

zxctsclrjjjcph的博客 1392

【论文详解】AlphaGenome——Sequence-to-Multimodal-Genome-Track

**AlphaGenome** 是由 **Google DeepMind** 于 2025 年 6 月发布的突破性 AI 模型,专门用于预测非编码区遗传变异的功能效应。该模型采用受 **U-Net** 启发的卷积架构结合 **Transformer** 模块,创新性地解决了传统模型在输入序列长度与预测分辨率之间的核心矛盾——能够在 **1M 碱基对的超长上下文** 下实现 **单核苷酸分辨率** 的精准预测。

zwhszdx的博客 959

【C++】递归,搜索与回溯算法入门介绍和专题一讲解

从本文开始进入递归,搜索与回溯算法专题讲解。递归就是函数自己调用自己。本文章详细讲解了递归,搜索与回溯算法的入门理解级操作,以及通过一道例题感受一下dfs这种算法的强大之处,关键在于dfs写起来特别简单。学好dfs,是进入大厂的必备技能。

如果需要沟通,可添加微信公众号找我免费答疑 2014

RobotStudio码垛机器人创建过程

首先导入一个IRB2600机器人,移动夹具的本地坐标原点,使原点位置为顶面中心(与法兰盘连接的部位)。对齐夹爪Smart组件的本地坐标和机器人末端法兰盘的坐标...

个人博客 1万+

【Docker】Docker安装Hadoop分布式集群

hadoop目录安装在:/usr/local/hadoop-2.7.0/etc/hadoop。访问Hadoop102:9870,查看是否能够看到hdfs界面。访问hadoop103:8088,查看能够看到yarn界面。在yarn上可以看到执行情况。

weixin_46429290的博客 3459

【递归、搜索和回溯】FloodFill 算法介绍及相关例题

FloodFill算法FloodFill就是洪水灌溉,解决的就是下面这样一种模型:解决性质相同的联通块问题,用的方法就是(1)dfs深度优先搜索遍历:一条道走到黑,直到不能再走,不能再走就倒回去;(2)bfs宽度优先搜索遍历:一层一层剥开。

zxctsclrjjjcph的博客 743

导数在工程与AI中的12个实战应用解析

导数作为数学中的基本概念,本质是描述变化率的工具,其核心价值在于将非线性问题局部线性化处理。从原理上看,通过极限过程捕捉函数瞬时变化特性,使工程师能精确控制系统动态行为,帮助科学家量化自然规律变化速率。在技术实现层面,现代符号计算(如Mathematica)、数值计算(如MATLAB)和自动微分(如PyTorch)工具链的发展,大幅提升了导数计算的效率与精度。典型应用场景涵盖机械控制(如ABS防抱死系统)、金融工程(如期权希腊值计算)、医疗影像(如Canny边缘检测)等领域。特别在机器学习中,反向传播算法依

weixin_35509395的博客 316

【递归、搜索与回溯算法】递归篇

递归、搜索与回溯算法这三种是相互依存,不可分割的。如果递归是一个大集合,那么搜索就是递归的一个分支,而回溯又是搜索集合的分支,它就是在搜索的基础上多了一步。因此递归是基础!

2301_77900444的博客 1290

高数15种常见特殊曲线:星形线、心形线、摆线、对数螺线、双曲螺线、阿基米德螺线、伯努利双纽线、三叶玫瑰线、四叶玫瑰线、六叶玫瑰线、三次抛物线、半立方抛物线、箕舌线、蔓叶线、笛卡儿叶形线、概率曲线

4.1 对数螺线(等角螺线、生长螺线)三叶玫瑰线、四叶玫瑰线、六叶玫瑰线。​7.2 半立方抛物线(尼尔曲线)10.笛卡儿叶形线(茉莉花瓣曲线)常考选择题、填空题,大题也涉及。​4.2 双曲螺线(倒数螺线)11.阿基米德螺线(等速螺线)3.摆线(圆滚线、旋轮线)5.双纽线(伯努利双纽线)1.星形线(四尖瓣线)2.心形线(心脏线)..................

刘鑫磊 1万+

RK3588 固定hdmiin的dev/videoX节点

RK3588 固定hdmiin的dev/videoX节点

目前从事linux驱动开发,多交流多学习吧 2050

【算法学习】递归、搜索与回溯算法(一)

【算法学习】关于递归、搜索与回溯算法的经典例题的讲解!!

2301_80220607的博客 3838

OpenClaw一人公司落地案例:本地商家营销智能体月赚3万的秘密

角色:本地商家营销专家## 核心目标为商家生成高转化率的抖音营销策略,最大化 ROI。## 输入数据- 商家名称: "XX奶茶店"- 过去 30 天视频播放量: 12,000- 客单价: 28 元- 竞品平均播放量: 15,000- 市场趋势: rising## 策略生成规则1. **内容类型**:根据客单价推荐- < 30 元:美食探店 + 优惠券- > 30 元:场景化故事 + 会员权益2. **发布时间**:根据历史数据- 18:00-20:00 高峰期。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 542

【递归、搜索与回溯算法】第一节.初识递归、搜索与回溯算法

今天我们将进入到递归,搜索,回溯算法,这些算法在我们笔试中非常重要,必须要熟练掌握,本节内容主要带着认识一下这些算法,了解其本质,后面会有很多例题来巩固这些算法!!!!

未央的博客哟 781

YOLO26优化:注意力魔改 | 用于微小目标检测的上下文增强和特征细化网络ContextAggregation,助力小目标检测,暴力涨点

用于微小目标检测的上下文增强和特征细化网络ContextAggregation,助力小目标检测

①答疑群聊服务;②YOLO大模型知识问答系统;③计算机视觉论文生成智能体; 489

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

【算法】递归、搜索与回溯

递归是算法中最基础却也最容易让人困惑的知识点之一。本文从“什么是递归、为什么使用递归、如何理解和写好递归”出发,系统讲解递归的基本概念和实现技巧。同时,结合多个经典题目(如汉诺塔问题、链表操作、幂函数计算、布尔树求值等),通过递归与循环的对比、从宏观和树形结构两个视角拆解递归过程,帮助读者真正掌握递归的本质。此外,文章还深入探讨递归与搜索算法(DFS、BFS)、暴力搜索、回溯与剪枝之间的区别与联系,理清遍历与搜索的边界与用途。

2302_80475369的博客 1179

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

【算法系列篇】递归、搜索与回溯(一)

递归、搜索与回溯算法(一):汉诺塔、合并两个有序链表、反转链表

不能再留遗憾了的博客 3015

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

递归、搜索与回溯算法(专题零:解释回溯算法中涉及到的名词)【回溯算法入门必看】

回溯算法、深搜、递归、递归和for循环的转换。回溯算法入门优选文章!!!

ANNE_fly的博客 1269

递归 回溯算法详解

递归回溯(恢复现场)详解

m0_74701193的博客 1275

递归、搜索与回溯算法 —— 名词解析

递归、搜索与回溯算法 —— 名词解析

祯的博客 1487

DFS+回溯+剪枝(深度优先搜索)——搜索算法

递归是这样理解把它拆分出来,两个字,递和归递递推这就需要找到递推公式归回归需要找到回归条件,递推过程逐渐逼近回归条件直白一点来说就是,一个函数自己调用自己的情况,当然一定是要能够返回的。二叉树的遍历,快排,归并中都用到了递归。

2302_80105876的博客 2322
上一篇: AHU-C++第二次实验
下一篇: AHU--数据库实验(二)--简单查询
Never~ending
博客等级 码龄4年 221粉丝 23原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值