详细实例说明+典型案例实现 对递归法进行全面分析 | C++

news2025/1/16 3:43:13

第二章    递归法


目录

●第二章    递归法

●前言

●一、递归法是什么?

1.简要介绍

2.生活实例

●二、递归法的典型案例——阶乘函数&斐波那契数列

1.阶乘函数

2.斐波那契数列

●总结


前言

        简单的来说,算法就是用计算机程序代码来实现数学思想的一种方法。学习算法就是为了了解它们在计算机中如何演算,以及在当今的信息时代,它们是如何在各个层面上影响我们的日常生活的,从而提高我们的逻辑思维能力和处理实际问题的能力。善用算法、巧用算法,是培养程序设计逻辑的重中之重,许多实际的问题都可用多个可行的算法来解决, 但是要从中找出最优的解决算法却是一项挑战。


一、递归法是什么?

1.简要介绍

        递归是一种很特殊的算法,分治法和递归法它们共同运用到一种思想,就是都将一个复杂的算法问题进行分解,让其变成一个个规模越来越小的子问题从而进行解决。简单来说,在程序设计语言中,函数或子程序不只是能够被其他函数调用或引用,还可以去自己调用自己,这就是所谓的递归。递归在早期人工智能所用的语言中是整个语言运行的核心,C/C++、Java、Python等很多程序设计语言都具备递归功能。

2.生活实例

        ① 我们和朋友两人去看电影,由于没有相邻的座位两人就各自买了票。但是我因为需要去上厕所将自己的票给了朋友,并且他先进场了。我来到放映厅中由于没有电影票而不知道自己的位置,而我们朋友的座位在某一排的最里面,所以这时我们就需要让这排最左边的这个人向里面传话,而他的右边不是我们的那个朋友就继续传话...... 直到传到我们的朋友那里,然后他在把电影票从最里面一个个传到外面,直到传到我们的手上。这个生活中常见的例子,就很像我们所要学习的递归法。

二、递归法的典型案例——阶乘函数&斐波那契数列

1.阶乘函数

①具体情况:(公式+实例)

公式直接实现以及在程序代码中的实现过程

②递归调用算法代码段:

int recursive(int n)
{
	int sum;
	if (n == 1)   //终止递归的条件,跳出递归过程的出口
		return 1;
	else
		return sum=n * recursive(n - 1);    //sum=n*(n-1)!,直接去调用自己,反复递归过程
}

③ 代码展示(C++)

        实现案例:用递归算法去求解阶乘10的值。

#include<iostream>
using namespace std;
class digui {
public:
	long long fact(int x)
	{
		if (x == 1) {
			return result = 1;
		}
		else {
			return result = x * fact(x - 1);
		}
	}
	void showresult()
	{
		cout << result << endl;
	}
	int a;
	long long result;
};
void func()
{
	digui dg;
	cout << "请输入要求解的递归数:";
	cin >> dg.a;
	dg.fact(dg.a);
	dg.showresult();
}
int main()
{
	func();
}

④ 代码结果展示:

2.斐波那契数列

①具体情况(公式+实例)

公式直接实现以及在程序代码中的实现过程

②递归调用算法代码段:

int Fib(int n)
{
	if (n == 1 || n == 2)
		return 1;
	else
		return Fib(n - 1) + Fib(n-2);
}

③ 代码展示(C++)

        实现案例:用递归算法去求第10个斐波那契数。

#include<iostream>
using namespace std;
class digui {
public:
	int fibonacci(int x)
	{
		int m, n;
		if (x == 1 || x == 2)
		{
			return num = 1;
		}
		else
		{
			m = fibonacci(x - 1);
			n = fibonacci(x - 2);
			return num = m + n;
		}
	}
	void shownum()
	{
		cout << num << endl;
	}
	int a;
	int num;
};
void text()
{
	digui dg;
	cout << "输入你要求的第几个斐波那契数:";
	cin >> dg.a;
	dg.fibonacci(dg.a);
	dg.shownum();
}
int main()
{
	text();
}

④ 代码结果展示:     


总结

        在上面,我们通过一个生活中的实例以及两个递归的典型问题,去详细的分析了递归法的核心思想和在程序中的具体实现过程。从程序设计语言的角度来说,谈到递归的定义,可以这样来描述:假如一个函数或子程序是由它自身所定义或调用的,就称它为递归。它至少要定义两个条件,一个是可以反复执行的递归过程,另一个是跳出执行过程的出口。

                                               <您的三连和关注是我最大的动力>

                       🚀 文章作者:Keanu Zhang        分类专栏:算法之美(C++系列文章)

 

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

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

相关文章

static关键字的作用

目录 C语言中static关键字的作用 1.static关键字修饰局部变量 2.static关键字修饰全局变量 3.static关键字修饰函数 在C中static关键的作用 1.静态成员变量 2.静态成员函数 C语言中static关键字的作用 1.static关键字修饰局部变量 概念&#xff1a; static修饰局部变量就…

这才是2023年csdn最系统的网络安全学习路线(建议收藏)

01 什么是网络安全 网络安全可以基于攻击和防御视角来分类&#xff0c;我们经常听到的 “红队”、“渗透测试” 等就是研究攻击技术&#xff0c;而“蓝队”、“安全运营”、“安全运维”则研究防御技术。 无论网络、Web、移动、桌面、云等哪个领域&#xff0c;都有攻与防两面…

2. 认识O(logN)的排序

1. 递归 递归arr[L…R]范围上求最大值 流程分析如下: java代码: package paixu.class01;public class Code08_GetMax {public static void main(String[] args) {int[] arr {3,2,5,6,7,4};System.out.println(getMax(arr));}public static int getMax(int[] arr) {return p…

浅谈非类型模板参数、模板的特化

非类型模板参数 1.模板参数分类类型形参与非类型形参。 2.类型形参即&#xff1a;出现在模板参数列表中&#xff0c;跟在class或者typename之类的参数类型名称。类型参数也可以给缺省值 3.非类型形参&#xff0c;就是用一个常量作为类(函数)模板的一个参数&#xff0c;在类(函…

FARO RevEng Software 22.3.9 Crack

FARO RevEng Software 22.3.9 用于反向工程的三维点云捕捉和网格生成 先进的 FARO RevEng 软件平台能为用户带来全面的数字设计体验。该反向工程软件有助于利用三维点云创建和编辑高质量的网格和 CAD 表面&#xff0c;以实现反向工程工作流程。然后&#xff0c;工业设计师可以利…

Zookeeper 集群安装

Zookeeper 集群 主机 IP SoftWare Port OS Myidnode1 192.168.230.128 apache-zookeeper-3.7.1 2181 Centos 7 1 node2 192.168.230.129 apache-zookeeper-3.7.1 2181 Centos 7 2 node3 192.168.230.130 apache-zookeeper-3.7.1 2181 Centos 7 31. 下载 Apache Downloads 下…

2022简单一年

牙齿软件决定开发的时间是2021年底&#xff0c; 老板说2022年任务是要开发牙齿咬合力的软件&#xff0c; 功能主要借鉴美国的一款软件,老板给了我一份软件的说明书&#xff0c; 包含了软件的所有功能。 看到软件第一感觉是&#xff0c; 做的确实是牛逼&#xff0c; 并且各…

【十 二】Netty 文件传输

概念介绍 文件是最常见的数据源之一&#xff0c;程序经常需要在文件中读取数据&#xff0c;也要将数据保存在文件中&#xff0c;进行持久化。 文件是计算机中一种基本的数据存储形式。即使计算机关机&#xff0c;文件的数据还是存在的&#xff0c;但是内存的数据就会丢失。 相…

联合证券|五定增项目同日被否 保荐机构该不该“背锅”?

一天之内5家上市公司定增一起被拒&#xff0c;这一音讯瞬间引发商场重视。 1月11日&#xff0c;浙江世宝、铭普光磁、胜华新材、日辰股份、振华科技等5家上市公司一起公告称&#xff0c;定增不被证监会受理&#xff0c;理由均是证监会以为请求资料不符合法定方式。 投行业界人…

18.Isaac教程--坐标系

坐标系 本节介绍相机、网格/矩阵/图像和机器人坐标系。 ISAAC教程合集地址: https://blog.csdn.net/kunhe0512/category_12163211.html 文章目录坐标系网格像素中心网格/矩阵/图像坐标系相机坐标系机器人坐标系网格像素中心 存储网格 GGG 上的值&#xff0c;使得网格单元将值…

Crack:CAD Exchanger GUI/CAD Exchanger Lab 不是SDK

CAD Exchanger GUI/CAD Exchanger Lab 用于查看、转换和分析 CAD、BIM 和 3D 数据 在 Windows、Mac 和 Linux 上加载和转换模型&#xff0c;而无需处理昂贵的 CAD 系统。 使用 CATIA、SOLIDWORKS、Creo、STEP、JT、IFC 和更多格式。 非常适合您的 3D 数据工作流程 连接不同的软…

多频电磁仪在2018年杭州电磁大会的报告(ICEEG)

本篇是对多频电磁方法,应用的解读。 本汇报讲述了EMI传感器的基本情况,以及用手持多频电磁仪进行实际探测应用的例子。 什么是电磁感应?用发射装置(TX)激发谐波,产生一次场(Primary field),地下导体目标会相应产生涡流电磁场,产生二次场,被接收装置(RX)探测到。 …

超参数、划分数据集、偏差与方差、正则化

目录1.超参数(hyperparameters)参数(Parameters)&#xff1a;&#xff0c;&#xff0c;&#xff0c;&#xff0c;&#xff0c;...超参数&#xff1a;能够控制参数W,b的参数&#xff0c;是在开始学习之前设置的参数。比如&#xff1a;学习率、梯度下降循环的数量#iterations、隐…

力扣sql基础篇(七)

力扣sql基础篇(七) 1 统计各专业学生人数 1.1 题目内容 1.1.1 基本题目信息 1.1.2 示例输入输出 1.2 示例sql语句 # 想要没有学生的部门也保存,就得以部门表作为主表 #字母表顺序就是升序 SELECT d.dept_name,IFNULL(s1.number,0) student_number FROM Department d LEFT …

2022. 12 青少年机器人技术等级考试理论综合试卷(二级)

2022.年12月青少年机器人技术等级考试理论综合试卷&#xff08;二级&#xff09; 一、 单选题(共 30 题&#xff0c; 共 60 分) 1.“机器人三原则” 是由谁提出的&#xff1f; &#xff08; &#xff09; A.美国人艾萨克 阿西莫夫 B.日本人森昌弘 C.美国人乔治 德沃尔 D.中国人…

谈谈 MongoDB 中连接池、索引、事务等问题

大家好&#xff0c;三分钟你将学会&#xff1a; MongoDB连接池的使用方式与常用参数查询五步走&#xff0c;能活九十九&#xff1f;MongoDB索引与MySQL索引有何异同&#xff1f;MongoDB事务与ACID什么是聚合框架&#xff1f;在最开始接触MongoDB的时候&#xff0c;是通过 Mong…

H3C V7MSR路由器定时限速的典型应用配置

某公司希望在上班时间对员工进行每IP限速&#xff0c;其他时间不限制。 1.主要配置如下&#xff1a; #创建关闭接口g0/1的限速功能 scheduler job close-car-g0/1 command 1 system-view command 2 interface g0/1 command 3 undo qos car inbound carl 1 #创建开启接口g0…

什么是CISP-ICSSE?到底该不该考?

CISP-ICSSE注册信息安全专业人员-工业控制系统安全工程师&#xff0c;英文为 Certified Information Security Professional-ICS Security Engineer&#xff0c;简称 CISP-ICSSE。 持证人员可以从事信息安全技术领域工业控制系统安全方向的工作&#xff0c;具备制定工 控安全威…

74. 序列模型

1. 序列数据 实际中很多数据是有时序结构的例如&#xff0c;电影的评价随时间变化而变化 拿奖后评分上升&#xff0c;直到奖项被忘记看了很多好电影后&#xff0c;人们的期望变高季节性&#xff1a;贺岁片、暑期档导演、演员的负面报道导致评分变低 2. 序列数据-更多例子 音…

【文件操作】C语言

目录1. 为什么使用文件2. 什么是文件2.1 程序文件2.2 数据文件2.3 文件名3. 文件的打开和关闭3.1 文件指针3.2 文件的打开和关闭4. 文件的顺序读写5. 文件的随机读写5.1 fseek5.2 ftell5.3 rewind6. 文本文件和二进制文件7. 文件读取结束的判定8. 文件缓冲区1. 为什么使用文件 …