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

news2024/11/25 4:19:44

第四章    迭代法


目录

●第四章    迭代法

●前言

●一、迭代法是什么?

1.简要介绍       

2.代码示例(简单理解)

3.生活实例 

●二、迭代法的典型案例——开平方&帕斯卡三角形

1.开平方

2.帕斯卡三角形

●总结


前言

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


一、迭代法是什么?

1.简要介绍       

        迭代法指的是无法使用公式去一次性求解,而是需要使用重复结构循环来重复去执行一段程序代码去得到答案。

2.代码示例(简单理解)

        ①使用迭代法去直接计算10!

#include<iostream>
using namespace std;
void text()
{
	int sum = 1;
	for (int i = 1; i <= 10; i++)
	{
		sum *= i;
	}
	cout <<"10! = " << sum << endl;
}
int main()
{
	text();
}

         ②上述方法采用的是一种固定执行次数的迭代法,而当遇到一个无法一次用公式去求解,又不能要去确定将要执行多少次的情况,就需要去用到while循环。while循环必须去加入控制变量的起始值以及递增或递减的表达式,在编写该循环的过程中去检查离开循环体的条件是否存在。如果条件不存在,则会让循环去无限循环的执行下去。

#include<iostream>
using namespace std;
void text()
{
	cout << "请输入要计算的阶乘数:";
	int n; cin >> n;
	int sum=1,i=1;
	while (i <= n)
	{
		sum *= i;
		i++;
	}	
	cout <<n <<"! = " << sum << endl;
}
int main()
{
	text();
}

3.生活实例 

        ① 按目前主流的生物进化论来说,生物的进化史,其实就很像一个迭代更新的过程。不同的生物在自己物种的基因下,经过长时间的生物变迁从而在基因和整体性状特征等等方面都会发生显著的变化。还有像在当今的互联网时代中,手机的更新过程就是一个迭代化的过程,通过这种迭代的方式对手机进行更新换代,从而不断地去完善技术突破并且满足不同用户群体的需求。

图片来源于百度百科

二、迭代法的典型案例——开平方&帕斯卡三角形

1.开平方

① 具体情况:

        在数学中,因为很多数的开平方都是无理数,所以我们需要借助数值计算的方式来进行近似值的求解。在数学中可以使用如下的迭代公式来求解a开平方的近似值:

 迭代法求解开平方算法的操作步骤如下:

        1.选定一个迭代初值x0,将其带入上面的迭代公式中求解出x1

        2.计算x1-x0的绝对值,如果小于指定精度e,则退出迭代过程,否则继续迭代运算

        3.将x(n)带入上面的迭代公式,求解出x(n+1)。继续判断x(n+1)-x(n)的绝对值,如果小于指定精度e,则退出迭代过程,否则继续迭代运算......

② 代码展示(C++):

        使用具体情况中的迭代公式法,去求解在精度0.000001下8的开平方值。

#include<iostream>
using namespace std;
class sqrtnum {
public:
	void sqrt()
	{
		double t=0;
		result = x;
		while (abs(result - t) > e)
		{
			t = result;
			result = 0.5 * (t + x / t);
		}
		cout << "结果为:" <<result << endl;
	}
	double e;  //精度
	double x;  //开平方数
	double result;   //迭代结果
};
void text()
{
	sqrtnum sn;
	cout << "请输入要开平方数:";
	cin >> sn.x;
	cout << "请输入开平方的精度数:";
	cin >> sn.e;
	sn.sqrt();
}
int main()
{
	text();
}

③结果展示:

2.帕斯卡三角形

① 具体情况

        帕斯卡三角形算法就是去计算出三角形每一个位置上的数值。在该三角上的每一个数字都各对应一个rCn,其中的r代表行,n代表列,它两都是从数字0开始。帕斯卡三角形如下:

使用以下公式去求解帕斯卡三角形中的对应值:

                rC0=1

                rCn=rCn-1*(r-n+1)/n

上面的两个式子代表的意义是每一行的第0列的数值一定是为1,例如上图所示,一旦每一行的第0列元素的值为数字1后,该行的每一列的元素值都可以从同一行前一列的值根据下面的公式计算得到:

                rCn=rCn-1*(r-n+1)/n

例如去求解3行的帕斯卡三角形的值,具体步骤:

                ①第0行帕斯卡三角的求值过程:当r=0,n=0时,即在第0行,第0列,对应的值为1;

                ②第1行帕斯卡三角的值求过程:当r=1,n=0时,即在第1行,第0列,对应的值为1;

当r=1,n=1时,即在第1行,第1列,对应的值为1C1=1C0*(1-1+1)/1=1;

                ③第2行帕斯卡三角的求值过程:当r=2,n=0时,即在第2行,第0列,对应的值为1;

当r=2,n=1时,即在第2行,第1列,对应的值为2C1=2C0*(2-1+1)/1=2;当r=2,n=2时,即在第2行,第二列,对应的值为2C2 =2C1*(2-2+1)/2;

② 代码展示(C++):
        使用程序代码去展示10行的帕斯卡三角数值。

#include<iostream>
using namespace std;
class pascal {
public:
	void calculator()
	{
		int r=0, n;
		int column= 1;
		int result,record;
		while (column <= x)
		{
			int t = 1;
			n = 0;
			for (int i = 1; i <= column; i++)
			{
				if (i == 1) {
					result = 1;
				}
				else {
					result = t * (r - n + 1) / n;
					t = result;
				}
				n++;
				cout<<result<<" ";
			}
			cout << endl;
			r++;
			column++;
		}
	}
	int x;
};
void text()
{
	pascal psc;
	cout << "请输入要求解几行的帕斯卡三角数:" ;
	cin >> psc.x;
	psc.calculator();
}
int main()
{
	text();
}

③结果展示:


总结

        上面我们对迭代算法进行了细致的举例和经典代码的讲解。使用该算法时,要注意体会我们所要求的东西它在程序代码中的更新迭代过程,理解核心思想从而去更好的运用这种常用的经典算法解决常规问题。

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

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

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

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

相关文章

游戏服务器如何维护

随着游戏的不断发展&#xff0c;游戏服务器的维护的重要性日益提升。对于玩家而言&#xff0c;他们需要得到更好的体验和更快的速度来享受这个娱乐项目。而对于运营者来说&#xff0c;则是确保安全运行、避免中断或者延迟的工作。本文就将介绍游戏服务器如何维护。如果你的游戏…

基于混沌系统和DNA算法的RGB图像加密(Matlab代码实现)

目录 &#x1f4a5;1 概述 &#x1f4da;2 运行结果 &#x1f389;3 参考文献 &#x1f468;‍&#x1f4bb;4 Matlab代码 &#x1f4a5;1 概述 本文介绍了基于混沌系统和DNA编码的彩色数字图像加密、解密、抗噪声性能分析以及抗裁剪性能分析。 &#x1f4da;2 运行结果 &…

Linux cksum命令

Linux cksum命令用于检查文件的CRC是否正确。确保文件从一个系统传输到另一个系统的过程中不被损坏。CRC是一种排错检查方式&#xff0c;该校验法的标准由CCITT所指定&#xff0c;至少可检测到99.998%的已知错误。指定文件交由指令"cksum"进行校验后&#xff0c;该指…

Stream 管道流

文章目录前言Stream Api1、流的创建2、中间操作2.1、有状态① distinct② sorted③ limit④ skip⑤ concat2.2、无状态① filter② map③ flatMap④ peek⑤ mapToInt、mapToLong、mapToDouble、flatMapToDouble、flatMapToInt、flatMapToLong⑥ unordered3、终结操作3.1、短路操…

如何快速升级 Cocos Shader 版本,以简易水shader为例

白背景讲述如何 将一份 3.0.0 版本的水shader 升级至 Cocos Creator 3.6 。希望对大家有所帮助。环境Cocos Creator 3.6.2效果玉此处是鱼&#x1f41f;&#xff0c;介绍如何使用在资源管理器中新建着色器(Effect)复制 文末的 mywater.effect 代码至当前文件在资源管理器中新建材…

Ai绘画生成软件哪个好用?这款AI作画的二次元太精致了

Ai绘画生成软件哪个好用呢&#xff1f;今天小编给大家推荐一款AI作画神器&#xff0c;用它生成的二次元真的是超级惊艳&#xff0c;每天每个手机号可以免费生成多张画作。 我们打开数画ai绘画&#xff0c;这是一款国产软件&#xff0c;使用的是自身研发的算法&#xff0c;目前…

Vue3+TypeScript系统学习(十五) - 详解Vue3 Composition API(二)

前面给大家分享了Options API语法中代码的复用、Options API编码的优缺点&#xff0c;以及setup函数&#xff0c;响应式API等&#xff0c;这次将给大家分享Vue3 Composition API中的计算属性&#xff0c;侦听器&#xff0c;生命周期函数&#xff0c;Provide和Inject等。 1.1 co…

商户绑卡银行卡流程设计优化

一、背景 历史商户系统&#xff0c;断断续续经过好多人开发&#xff0c;商户绑卡流程数据好多地方不同步。 商户绑卡会调用支付平台进行绑卡&#xff0c;但是历史平台将数据留存了一份&#xff0c;所以目前现状&#xff0c;商户平台维护一份数据&#xff0c;支付平台维护一份数…

吴恩达机器学习课程笔记:模型描述、假设函数、代价函数

1.吴恩达机器学习课程笔记&#xff1a;模型描述、假设函数、代价函数 吴恩达机器学习课程笔记&#xff1a;模型描述 吴恩达机器学习课程笔记&#xff1a;代价函数 仅作为个人学习笔记&#xff0c;若各位大佬发现错误请指正 什么是模型&#xff1f; 机器学习模型简单来说&#…

玩转数据结构前言

本章为数据结构学习前的一些学习方法建议 51刷题法 leetcode中文站点: https://leetcode-cn.com leetcode国际站点: https://leetcode.com 刷题方法 Round1 1.读题&#xff0c;思考&#xff0c;4-6分钟内有思路立马写&#xff0c;15分钟内写不出来直接放弃 有思路先别管算…

使用mongostat命令实现zabbix监控mongodb

zabbix监控mongodbmongostat命令监控脚本参考zabbix配置mongostat命令 mongostat是mongodb自带的状态检测工具&#xff0c;可以使用这个命令获取mongodb的当前运行状态&#xff0c;并输出。我们使用这个命令获取mongodb的状态。 本示例中是一个3节点的复制集群&#xff08;一…

调用方系统禁止依赖传递后如何排查本系统所缺少依赖

订单系统依赖了好多其他系统&#xff0c;但当其他系统的service-api的包里依赖项加入了禁止依赖后&#xff0c;订单系统启动就会报错&#xff0c;具体排查那些包被禁止依赖了&#xff0c;方案如下 举例&#xff1a;会员系统后个包加入了禁止依赖<optional>true</opti…

Java中set的基本操作

文章目录1、定义Set2、增删改操作&#xff08;1&#xff09;新增&#xff08;2&#xff09;删出&#xff08;3&#xff09;修改3、访问set4、遍历set&#xff08;1&#xff09;foreach遍历&#xff08;2&#xff09;iterator迭代器遍历5、set转换6、其他操作set是一个无序的集合…

深度解析源码之SpringMVC文件上传为什么要用POST请求还要设置请求头

深度解析源码之SpringMVC文件上传为什么要用POST请求还要设置请求头 从本篇文章开始&#xff0c;来逐步介绍里面每一步的细节处理流程。 首先看到doDispatch方法的第一个重要操作就是校验文件上传请求。代码如下&#xff1a; 这个方法是如何校验文件上传请求的呢&#xff1f;…

软件测试最常用的 SQL 命令 | 通过实例掌握基本查询、条件查询、聚合查询

本文为霍格沃兹测试学院优秀学员学习笔记&#xff0c;汇总了软件测试人员经常使用&#xff0c;必须掌握的 SQL 基础命令1、DML核心CRUD增删改查缩写全称和对应 SQL&#xff1a;* DML 数据操纵语言&#xff1a;Data Manipulation Language* Create 增加&#xff1a;insert* Ret…

工作和学习遇到的技术问题

写在前面 记录工作和学习遇到的技术问题,以求再次遇到可以快速解决。 1&#xff1a;Ubuntu TSL换源报错&#xff1a;Err:1 http://mirrors.aliyun.com/ubuntu focal InRelease 执行如下操作&#xff08;已经操作的则忽略&#xff09;&#xff0c;首先在文件/etc/apt/sources…

Vue.js 数据双向绑定的实现

前言 在我们使用vue的时候&#xff0c;当数据发生了改变&#xff0c;界面也会跟着更新&#xff0c;但这并不是理所当然的&#xff0c;我们修改数据的时候vue是如何监听数据的改变以及当数据发生改变的时候vue如何让界面刷新的&#xff1f; 当我们修改数据的时候vue是通过es5中…

DataGear 制作基于Vue2、Element UI弹窗效果的数据可视化看板

DataGear 在4.4.0版本新增了dg-chart-manual-render特性&#xff0c;用于手动控制看板内图表的渲染&#xff0c;而非在页面加载时自动渲染。利用这一特性&#xff0c;可以很方便制作具有弹窗效果的数据可视化看板。 本文以Vue2、Element UI 前端框架为例&#xff0c;介绍如何制…

【C语言】通讯录—静态版

前言: 刚学完结构体和枚举&#xff0c;在网上找了个通讯录的项目&#xff0c;用来练手 目标:该通讯录可存储千人个人信息 包括:姓名&#xff0c;年龄&#xff0c;性别&#xff0c;电话&#xff0c;地址 实现功能: 1.添加联系人 2.删除联系人 …

Web 安全漏洞之 XSS 攻击

什么是 XSS 攻击 XSS&#xff08;Cross-Site Scripting&#xff09;又称跨站脚本&#xff0c;XSS的重点不在于跨站点&#xff0c;而是在于脚本的执行。XSS是一种经常出现在 Web 应用程序中的计算机安全漏洞&#xff0c;是由于 Web 应用程序对用户的输入过滤不足而产生的。 常…