算法学习——递归

news2024/9/28 13:28:20

 

引言

    从这个专栏开始,我们将会一起来学习算法知识。首先我们要一起来学习的算法便是递归。为什么呢?因为这个算法是我很难理解的算法。我希望通过写这些算法博客;来加深自己对于递归算法的理解和运用。当然,学习算法最快的方式便是通过刷题。但是今天这篇博客不会涉及到递归的题,而会涉及到一些关于如何运用递归算法的讨论。

一,递归

1.何为递归

其实递归便是一种自己调用自己的行为。比如说以下代码:

void fun(int n)
{
	if (n == 0)
	{
		return;
	}
	cout << n << endl;

	fun(n - 1);
}

这个代码在自己的函数体里面又调用了自己,所以便构成了递归。

2.递归三部曲

在使用递归的算法时首先便要找到重复的子问题,找到重复的子问题后便可以设计出一个递归函数头。在找到函数头以后的第二步便要找到递归函数的结束条件,这便是函数递归的出口。第三步便是只关心解决一个子问题的步骤然后写出函数体。

总结一下便是如下步骤:

1.找到重复的子问题,设计出函数头。

2.找到函数递归的结束条件,找到递归的出口。

3.只关心一个子问题的解决,设计出函数体。

如斐波那契数列问题。斐波那契数列要我们找到第n个数的值。现在我们根据以上步骤来实现一下斐波那契数列的递归解法。

1.重复的子问题:第n个数的值是前两个数的和。所以只设计一个参数来表明是第几个数。

2.递归结束条件:第一个与第二个数的值是固定的,都是1。所以,当递归到n==1或者n==2时便返回1终止递归。

3.一个子问题的解决方案便是求出前两个数的和,再返回。

代码如下:

int fib(int n)//函数头
{
	if (n == 1 || n == 2)//递归出口
	{
		return 1;
	}

	int sum = fib(n - 1) + fib(n - 2);//函数体

	return sum;
	
}

写在最后:

以上便是对递归的一般使用步骤的说明,接下来便一起进入到递归题目的练习中吧。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/929247.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

一文解析block io生命历程

作为存储业务的一个重要组成部分&#xff0c;block IO是非易失存储的唯一路径&#xff0c;它的生命历程每个阶段都直接关乎我们手机的性能、功耗、甚至寿命。本文试图通过block IO的产生、调度、下发、返回的4个阶段&#xff0c;阐述一个block IO的生命历程。 一、什么是块设备…

Python“牵手”lazada商品列表数据,关键词搜索lazadaAPI接口数据,lazadaAPI接口申请指南

lazada平台API接口是为开发电商类应用程序而设计的一套完整的、跨浏览器、跨平台的接口规范&#xff0c;lazadaAPI接口是指通过编程的方式&#xff0c;让开发者能够通过HTTP协议直接访问lazada平台的数据&#xff0c;包括商品信息、店铺信息、物流信息等&#xff0c;从而实现la…

安装启动yolo5教程

目录 一、下载yolo5项目 二、安装miniconda&#xff08;建议不要安装在C盘&#xff09; 三、安装CUDA 四、安装pytorch 五、修改配置参数 六、修改电脑参数 七、启动项目 博主硬件&#xff1a; Windows 10 家庭中文版 一、下载yolo5项目 GitHub - ultralytics/yolov5:…

C++笔记之智能指针和单例、依赖注入结合使用

C笔记之智能指针和单例、依赖注入结合使用 code review! 文章目录 C笔记之智能指针和单例、依赖注入结合使用例1.一个类不使用单例&#xff0c;另一个类使用单例例2.两个类都使用单例&#xff0c;并且通过getInstance()传入类的实例例3.std::make_unique不能访问私有的构造函…

python将png格式的图片转换为jpg格式的图片

png图片是4通道 RGBA图像&#xff0c;具有4个通道&#xff08;红色、绿色、蓝色和透明度&#xff09;&#xff0c;用于表示彩色图像以及透明度信息。 只是简单的修改后缀&#xff0c;并不能将png格式图片改为jpg格式。 将png格式的图片转换为jpg格式的图片 确保安装了pillow库…

自启动遇到某个节点或者某种环境变量问题导致启动失败

前言&#xff1a;此次记录无人车自启动过程遇到的问题。为了让ROS无人车能够实现飞控进行室外自主航线的问题&#xff0c;将飞控发布的PWM转为ROS无人车对应的速度。为了确保无人车启动后能够使用遥控器控制无人车&#xff0c;所以需要开机自启动。 硬件&#xff1a; 1、star…

C语言刷题训练DAY.13

1.有序序列判断 解题思路&#xff1a; 这里我们先看代码&#xff0c;我们定义了一个flag1和flag2&#xff0c;它的作用主要就是判断是不是升序&#xff0c;具体怎么使用的&#xff0c;我为大家画图展示。 解题代码&#xff1a; #include<stdio.h> int main() {int n 0;…

springboot源码编译问题

问题一 Could not find artifact org.springframework.boot:spring-boot-starter-parent:pom:2.2.5.RELEASE in nexus-aliyun (http://maven.aliyun.com/nexus/content/groups/public/) 意思是无法在阿里云的镜像仓库中找到资源 解决&#xff1a;将配置的镜像删除即可&#…

《代码随想录》专题:回溯算法1

1、组合问题 题目链接&#xff1a;77. 组合 题解 把组合问题抽象为如下树形结构 图中每次搜索到了叶子节点&#xff0c;我们就找到了一个结果。相当于只需要把达到叶子节点的结果收集起来&#xff0c;就可以求得 n个数中k个数的组合集合。最难理解的是单层搜索的过程 回溯法的…

NIST SP 800-22测试包

NIST测试包,包含15种不同的测试,对序列的随机性进行测试。其中,部分测试包含子测试。 随便选一个序列,看看测试结果: ------------------------------------------------------------------------------ RESULTS FOR THE UNIFORMITY OF P-VALUES AND THE PROPORTION OF P…

Linux学习之Ubuntu 20.04在github下载源码安装Openresty 1.19.3.1

参考的博文&#xff1a;《在 Ubuntu 上使用源码安装 OpenResty》 《OpenResty 安装安装详解-Ubuntu》 《Linux学习之CentOS 7源码安装openresty》 https://openresty.org/en/download.html是官网下载网址&#xff0c;页面往下拉有下载的链接。 https://github.com/openresty…

表达式(Expression)

可以将lambda表达式分配给Func或Action类型委托&#xff0c;以处理内存中的集合。.NET编译器在编译时将分配给Func或Action类型委托的lambda表达式转换为可执行代码。 LINQ引入了一种名为Expression的新类型&#xff0c;该类型代表强类型的lambda表达式。这意味着lambda表达式也…

Vue2向Vue3过度核心技术工程化开发和脚手架

目录 1 工程化开发和脚手架1.1 开发Vue的两种方式1.2.脚手架Vue CLI 2 项目目录介绍和运行流程2.1 项目目录介绍2.2 运行流程 3 组件化开发4 根组件 App.vue4.1 根组件介绍4.2 组件是由三部分构成4.3 总结 5 普通组件的注册使用-局部注册5.1 特点&#xff1a;5.2 步骤&#xff…

redis持久化机制 事务详解

目录 前言&#xff1a; 持久化机制 RDB&#xff08;Redis DataBase&#xff09; 手动触发 save bgsave 自动触发 RDB特点 AOF&#xff08;append only file&#xff09; 缓冲区刷新策略 重写机制 aof重写流程 混合持久化 事务 事务操作命令 WATCH WATCH实现原…

【前端从0开始】HTML5+CSS3基础语法

html5发展 HTML5是HTML最新的修订版本&#xff0c;2014年10月由万维网联盟&#xff08;W3C&#xff09;完成标准制定。 HTML5 仍处于完善之中。然而&#xff0c;大部分现代浏览器已经具备了某些 HTML5 支持 h5添加css hack&#xff0c;css zoom知识点 特性 新的特殊内容元素…

【洛谷】P2440 木材加工

原题链接&#xff1a;https://www.luogu.com.cn/problem/P2440 1. 题目描述 2. 思路分析 整体思路&#xff1a;二分答案 设置一个变量longest来记录最长木头的长度&#xff0c;sum记录切成的小段数量之和。 令左边界l0&#xff0c;右边界llongest。 写一个bool类型的check…

函数指针.

首先看一段代码&#xff1a; #include <stdio.h> void test() {printf("hehe\n"); } int main() {printf("%p\n", test);printf("%p\n", &test);return 0; } 输出结果&#xff1a; 输出的是两个地址&#xff0c;这两个地址是 test 函…

VMware 中Centos8的NAT网络设置

1、先将虚拟机设置为NAT模式 2、打开虚拟网络编辑器&#xff0c;记录以下信息 NAT设置&#xff1a;子网掩码、网关 DHCP设置&#xff1a;I P 范围 (自动时) 3、进入Centos8的网络设置页面&#xff0c;按照记录的信息进行配置 4、重载、重启网卡 nmcli c reload ensl60 n…

【位运算】算法实战

文章目录 一、算法原理常见的位运算总结 二、算法实战1. leetcode面试题01.01. 判断字符是否唯一2. leetcode268 丢失的数字3. leetcode371 两整数之和4. leetcode004 只出现一次的数字II5. leetcode面试题17.19. 消失的两个数字 三、总结 一、算法原理 计算机中的数据都以二进…

基础论文学习(5)——MAE

MAE&#xff1a;Masked Autoencoders Are Scalable Vision Learners Self-Supervised Learning step1&#xff1a;先用无标签数据集&#xff0c;把参数从一张白纸训练到初步预训练模型&#xff0c;可以得到数据的 Visual Representationstep2&#xff1a;再从初步成型&#x…