【蓝桥杯每日一题】递归算法
🍎 博客主页:🌙@披星戴月的贾维斯
🍎 欢迎关注:👍点赞🍃收藏🔥留言
🍇系列专栏:🌙 蓝桥杯
🌙我与杀戮之中绽放,亦如黎明的花朵🌙
🍉一起加油,去追寻、去成为更好的自己!
蓝桥杯倒计时 37天

文章目录
- 🍎、递归算法
- 🍎、例题分析
- 🍇、(AcWing)递归实现指数型枚举
- 🍇、(AcWing)递归实现排列型枚举
- 🍇、(AcWing)树的遍历
- 🍎、总结
提示:以下是本篇文章正文内容,下面案例可供参考
🍎、递归算法
🍉、递归的概念
递归算法(英语:recursion algorithm)在计算机科学中是指一种通过重复将问题分解为同类的子问题而解决问题的方法。递归式方法可以被用于解决很多的计算机科学问题,因此它是计算机科学中十分重要的一个概念。绝大多数编程语言支持函数的自调用,在这些语言中函数可以通过调用自身来进行递归。计算理论可以证明递归的作用可以完全取代循环,因此在很多函数编程语言(如Scheme)中习惯用递归来实现循环。(来源:百度百科)
🍉、递推的简单例子
1、求阶乘的函数,就是递归调用自己的一个简单的例子
int fact(int x)
{if(n == 0) return 1;else return n = n * fact(n - 1);
}
2、斐波那契数列也是一个简单的递归调用自身的例子:
int fbnq(int n)
{if (n == 1 || n == 2) return 1;if(n > 2)return (fbnq(n - 1) + fbnq(n - 2));
}
3、我们在构建树,以及深度优先搜索时,都会用到递归。每一棵树都对应这一种递归。
void dfs(int u)
{if(满足条件)dfs(u + 1);
}
🍉、递推示例图

🍎、例题分析
🍇、(AcWing)递归实现指数型枚举
本题链接: 递归实现指数型枚举

分析题意

代码示例:
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int N = 20;
int n;
bool st[N];
void dfs(int u)
{if(u > n){for(int i = 1; i <= n; i++)if(st[i])cout << i << " ";puts("");return;}st[u] = false;//第一个分支不选;dfs(u + 1); //往下一层递归st[u] = true;//恢复现场dfs(u + 1);
}
int main ()
{cin >> n;dfs(1);return 0;
}
🍇、(AcWing)递归实现排列型枚举
本题链接: 递归实现排列型枚举

分析题意

代码示例:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int n;
const int N = 10;
int st[N];
bool used[N];
void dfs(int u)
{if(u > n){for(int i = 1; i <= n; i++)printf("%d ", st[i]);puts("");return;}for(int i = 1; i <= n; i++)if(!used[i])//没用过{st[u] = i;//没用过填进去used[i] = true;//表示用过了dfs(u + 1);//递归到下一位st[u] = 0;//恢复现场used[i] = false;//回溯}
}int main ()
{cin >> n;dfs(1);return 0;
}
🍇、(AcWing)树的遍历
本题链接: 树的遍历


#include<iostream>
#include<vector>
#include<algorithm>
#include<cstring>
using namespace std;
const int N = 35;
int a[N], b[N], p[N]; //a表示后序遍历,b表示中序遍历,p存储中序遍历每一个下标的位置。
int n;
vector<int >level[N];
void build(int al, int ar, int bl, int br, int d) // 递归构建子树。
{if(al > ar) return;int val = a[ar]; //根结点的权值 level[d].push_back(val);int k = p[val]; //求一下根结点的权值在中序遍历里面的下标build(al, al + k - 1 - bl, bl, k - 1, d + 1);build(al + k -bl, ar - 1, k + 1, br , d + 1);
}
int main()
{cin >> n;for(int i = 0; i < n; i++) cin >> a[i];for(int i = 0; i < n; i++) cin >> b[i];for(int i = 0; i < n; i++) p[b[i]] = i;//记录每一个数值在中序遍历里的位置build(0, n - 1, 0, n-1, 0);for(int i = 0; i < n; i++)for(auto c: level[i])cout << c << " ";return 0;
}
🍎、总结
本文简要介绍了递归算法的简要概念和几道递归算法的经典例题,希望大家读后能有所收获!
相关文章:
【蓝桥杯每日一题】递归算法
🍎 博客主页:🌙披星戴月的贾维斯 🍎 欢迎关注:👍点赞🍃收藏🔥留言 🍇系列专栏:🌙 蓝桥杯 🌙我与杀戮之中绽放,亦如黎明的花…...
java 寻找2020
题目描述 本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。 小蓝有一个数字矩阵,里面只包含数字 0 0 和 2 2。小蓝很喜欢 2020 2020,他想找 到这个数字矩阵中有多少个 2020 2020 。 小蓝只关注三种构成 …...
1.1 小白黑群晖构建,硬件推荐,硬件选购教程
构建一台黑群晖需要购买:CPU主板、散热器、内存条、机箱、电源、硬盘、网卡(可选)。物理机安装若需硬解需选择918/920此类机型系统进行安装。关联教程:黑群晖安装中的报错:https://guoqing.blog.csdn.net/article/deta…...
实验三、数字PID控制器的设计
实验三、数字PID控制器的设计 --- 直流闭环调速实验 一、实验目的 1.理解晶闸管直流单闭环调速系统的数学模型和工作原理;. 2. 掌握PID控制器参数对控制系统性能的影响; 3. 能够运用MATLAB/Simulink软件对控制系统进行正确建模并对模块进行正确的参数设置; 4.…...
python List和常用的方法
List:列表中包含多个数据,数据之间使用逗号分隔,索引从0开始。 空列表: dir:查看列表的所有方法 List常用方法:insert、append,extend、del、remove、pop、clear、count、index 增加insert(索引…...
PMP证书要怎么考,含金量怎么样?
对于新改版的PMP提纲,很多人都不知道如何去备考,这里我就总结一些经验,希望能帮助到大家!! 一,学习内容及考试形式? 学习内容:《PMBOK》项目管理知识体系指南,建议大家…...
MySQL实战解析底层---事务隔离:为什么你改了我还看不见
目录 前言 隔离性与隔离级别 事务隔离的实现 事务的启动方式 前言 和数据库打交道的时候,总是会用到事务最经典的例子就是转账,你要给朋友小王转 100 块钱,而此时你的银行卡只有 100 块钱转账过程具体到程序里会有一系列的操作࿰…...
变更数据捕获(CDC)
从广泛意义上说,全球许多企业每天都需要通过频繁的数据批量处理与加载,来定期将数据从一个数据库迁移到另一个数据库(或数据仓库)。这类定期批量加载的工作,往往既耗费时间,又会消耗原始系统的大量处理能力。因此,管理…...
【移动端表格组件】uniapp简单实现H5,小程序,APP多端兼容表格功能,复制即用,简单易懂【详细注释版本】
前言: 由于最近需要做移动端的项目 有个pc端的后台系统里面需要移一部分页面过来 而里面就有很多的表格,我就开始惯例网上先找前人栽的树,我好乘凉 然后找了一圈发现,不管是主流的移动端ui库或者网上自己写的帖子,或者…...
电子技术——CMOS 逻辑门电路
电子技术——CMOS 逻辑门电路 在本节我们介绍如何使用CMOS电路实现组合逻辑函数。在组合电路中,电路是瞬时发生的,也就是电路的输出之和当前的输入有关,并且电路是无记忆的也没有反馈。组合电路被大量的使用在当今的数字逻辑系统中。 晶体管…...
【C++】C++11 新特性
目录 1.列表初始化 1.1. C98中使用{}初始化的问题 1.2. 内置类型的列表初始化 1.3. 自定义类型的列表初始化 2. 变量类型推导 2.1. 为什么需要类型推导 2.2. decltype类型推导 2.2.1 为什么需要decltype 2.2.2. decltype 3. 对默认成员的控制(default、delete) 3.1. …...
JPA 相关注解说明
jpa相关注解 JPA(Java Persistence API)是一种Java规范,定义了一套标准的对象关系映射(ORM)API,用于将Java对象映射到关系型数据库中。JPA旨在统一各种ORM框架之间的差异,提供一种标准化的ORM解…...
SAP 生产订单/流程订单中日期的解释
SAP 生产订单/流程订单中日期的解释 基本开始日期:表示订单的开始日期 基本完成日期:表示订单的完成日期 我们在输入基本开始日期和基本完成日期时需要关注 调度 下面的“类型”,其中有向前、向后、当天日期等: 调度类型 为向前…...
Java设计模式笔记——七大设计原则
系列文章目录 第一章 Java 设计模式之七大设计原则 文章目录系列文章目录前言一、单一职责原则1.案例分析2.改进二、开闭原则1.案例分析2.改进三、里氏替换原则1.案例分析2.改进四、依赖倒转原则五、接口隔离原则1.案例分析2.改进六、合成复用原则1.案例分析2.改进七、迪米特原…...
记录第一次接口上线过程
新入职一家公司后,前三天一直在学习公司内部各种制度文化以及考试。 一直到第三天组长突然叫我过去,给了一个需求的思维导图,按照这个需求写这样一个接口, 其实还不错,不用自己去分析需求,按照这上面直接开…...
时序预测 | MATLAB实现Rmsprop算法优化LSTM长短期记忆神经网络时间序列多步预测(滚动预测未来,多指标,含验证Loss曲线)
时序预测 | MATLAB实现Rmsprop算法优化LSTM长短期记忆神经网络时间序列多步预测(滚动预测未来,多指标,含训练和验证Loss曲线) 目录 时序预测 | MATLAB实现Rmsprop算法优化LSTM长短期记忆神经网络时间序列多步预测(滚动预测未来,多指标,含训练和验证Loss曲线)效果一览基本描…...
如何利用Level2行情数据接口追板和交易股票?
十档行情看得更深的A股行情软件,我们在盘口数据中可以看到,买一到买五以及卖一到卖五,共10个价位的挂单情况,但基于上证所的level-2行情软件,视野则扩展到了买一到买十以及卖一到卖十数据,无疑比所有免费软…...
MySQL常用的聚合函数
聚合函数聚合函数对一组值进行运算,并返回单个值。也叫组合函数函数作用COUNT(*|列名) 统计查询结果的⾏数AVG(数值类型列名)求平均值,返回指定列数据的平均值SUM (数值类型列名)求和,返回指定列的总和MAX(列名)查询指定列的最⼤值MIN(列名)查…...
如何评估模糊测试工具-unibench的使用
unibench是一个用来评估模糊测试工具的benchmark。这个benchmark集成了20多个常用的测试程序,以及许多模糊测试工具。 这篇文章(https://zhuanlan.zhihu.com/p/421124258)对unibench进行了简单的介绍,本文就不再赘诉,…...
2023初级会计详细学习计划打卡表!自律逆袭,一次上岸!
2023年初级会计职称考试报名时间:2月7日-28日考试时间:5月13日—17日给大家整理了《经济法基础》和《初级会计实务》两科超实用的学习打卡表重要程度、难易度、易错点、要求掌握内容、章节估分等都全部总结在一起,一目了然!为什么…...
Stable Diffusion XL 1.0开源大模型教程:灵感画廊app.py核心逻辑解读
Stable Diffusion XL 1.0开源大模型教程:灵感画廊app.py核心逻辑解读 “见微知著,凝光成影。将梦境的碎片,凝结为永恒的视觉诗篇。” 如果你对AI绘画感兴趣,一定听说过Stable Diffusion XL 1.0这个强大的开源模型。但面对复杂的参…...
CLIP-GmP-ViT-L-14入门指南:ViT-L-14主干网络结构与特征提取流程
CLIP-GmP-ViT-L-14入门指南:ViT-L-14主干网络结构与特征提取流程 1. 项目概述 CLIP-GmP-ViT-L-14是一个经过几何参数化(GmP)微调的CLIP模型,在ImageNet和ObjectNet数据集上能达到约90%的准确率。这个模型基于ViT-L-14(Vision Transformer Large 14)主干…...
nli-distilroberta-baseAI应用:心理健康聊天机器人对话逻辑连贯性监测
NLI DistilRoBERTa Base AI应用:心理健康聊天机器人对话逻辑连贯性监测 1. 项目概述 心理健康聊天机器人正成为越来越多人寻求心理支持的重要工具。然而,这类对话系统面临一个关键挑战:如何确保对话内容的逻辑连贯性?这正是nli-…...
高效解决付费墙难题:Bypass Paywalls Clean实用技术指南
高效解决付费墙难题:Bypass Paywalls Clean实用技术指南 【免费下载链接】bypass-paywalls-chrome-clean 项目地址: https://gitcode.com/GitHub_Trending/by/bypass-paywalls-chrome-clean 在数字信息时代,付费墙已成为获取优质内容的主要障碍&…...
苹果内购Java后端避坑指南:沙盒测试、凭据验证与订单防重的那些事儿
苹果内购Java后端避坑指南:沙盒测试、凭据验证与订单防重的那些事儿 第一次对接苹果应用内购(IAP)时,我以为按照官方文档走完流程就万事大吉了。直到凌晨三点收到服务器告警——重复充值、验证超时、沙盒环境漏测等问题接踵而至。…...
告别鉴权内耗,让每一位Java开发者都能轻松上手
写Java的这些年,无论是初入职场的新手,还是深耕多年的老兵,谁没在「鉴权」上栽过跟头? 熬夜啃Spring Security的复杂配置,对着一堆过滤器链抓耳挠腮;用Shiro做前后端分离项目,为了适配Token模式…...
神经高利贷:预支未来技能导致认知崩溃
在软件测试领域,从业者常面临一个隐形威胁:过度追求新技能而忽视认知极限,最终引发崩溃。这种现象被称为“神经高利贷”,即通过预支未来学习能力来应对当前挑战,结果导致认知资源枯竭、错误率飙升,甚至职业…...
3大核心模块:Steam成就管理开源工具从问题解决到效率提升的实战指南
3大核心模块:Steam成就管理开源工具从问题解决到效率提升的实战指南 【免费下载链接】SteamAchievementManager A manager for game achievements in Steam. 项目地址: https://gitcode.com/gh_mirrors/st/SteamAchievementManager 引言 在游戏玩家的日常体…...
3大核心功能让你的英雄联盟体验提升300%:League-Toolkit完全指南
3大核心功能让你的英雄联盟体验提升300%:League-Toolkit完全指南 【免费下载链接】League-Toolkit 兴趣使然的、简单易用的英雄联盟工具集。支持战绩查询、自动秒选等功能。基于 LCU API。 项目地址: https://gitcode.com/gh_mirrors/le/League-Toolkit 引言…...
实战级SQL注入测试技巧揭秘
目录 一、高阶注入判断技巧(不爆数据,只测漏洞) 1. 布尔盲注(Boolean-based) 2. 时间盲注(Time-based) 3. 报错注入(Error-based) 二、高阶利用手法(实战…...
