问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

迭代的基本算法

发布网友 发布时间:2022-04-23 01:16

我来回答

1个回答

热心网友 时间:2023-10-09 21:52

有些国外的教材,如《C++ Primer》第四版的中文版,会把iterative翻译成迭代。
在java中Iterative 仅用于遍历集合,本身并不提供盛装对象的能力。如果需要创建Iterative对象,则必须有一个被迭代的集合。没有集合的Iterative仿佛无本之木,没有存在的价值。    iterative是反复的意思,所以,有时候,迭代也会指循环执行,反复执行的意思。
利用迭代算法解决问题,需要做好以下三个方面的工作: 在什么时候结束迭代过程?这是编写迭代程序必须考虑的问题。不能让迭代过程无休止地重复执行下去。迭代过程的控制通常可分为两种情况:一种是所需的迭代次数是个确定的值,可以计算出来;另一种是所需的迭代次数无法确定。对于前一种情况,可以构建一个固定次数的循环来实现对迭代过程的控制;对于后一种情况,需要进一步分析出用来结束迭代过程的条件。
例1 : Fibonacci Sequence(斐波那契数列)
即这样一个数列:0、1、1、2、3、5、8、13......,在数学上该数列定义为:
F(0)=0,F(1)=1; F(n) = F(n-1)+F(n-2) (n≥2,n∈N*)。
一般该数列可以递归实现,下面是用C语言 迭代 实现:
int fab(int n)
{ if (n<3)
{return 1;}
else
{int first = 1,second = 1,temp = 0;
for (int i =0;i<n-2;i++)
{temp = first + second;
first = second;
second = temp;}
return temp;
}
}
例 1 :一个饲养场引进一只刚出生的新品种兔子,这种兔子从出生的下一个月开始,每月新生一只兔子,新生的兔子也如此繁殖。如果所有的兔子都不死去,问到第 12 个月时,该饲养场共有兔子多少只?
分析:这是一个典型的递推问题。我们不妨假设第 1 个月时兔子的只数为 u 1 ,第 2 个月时兔子的只数为 u 2 ,第 3 个月时兔子的只数为 u 3 ,……根据题意,“这种兔子从出生的下一个月开始,每月新生一只兔子”,则有
以下是引用片段:
u 1 = 1 , u 2 = u 1 + u 1 × 1 = 2 , u 3 = u 2 + u 2 × 1 = 4 ,……
根据这个规律,可以归纳出下面的递推公式:
以下是引用片段:
u n = (u n - 1) × 2 (n ≥ 2)* ①
对应 u n 和 u n - 1 ,定义两个迭代变量y 和 x ,可将上面的递推公式转换成如下迭代关系:
以下是引用片段:
y=x*2
x=y
让计算机对这个迭代关系重复执行 11 次,就可以算出第 12 个月时的兔子数。参考程序如下:
以下是引用片段:
cls
x=1
for i=2 to 12
y=x*2
x=y
next i
print y
end
例 2 :阿米巴用简单*的方式繁殖,它每*一次要用 3 分钟。将若干个阿米巴放在一个盛满营养参液的容器内, 45 分钟后容器内充满了阿米巴。已知容器最多可以装阿米巴 2 20 个。试问,开始的时候往容器内放了多少个阿米巴?请编程序算出。
分析:根据题意,阿米巴每 3 分钟*一次,那么从开始的时候将阿米巴放入容器里面,到 45 分钟后充满容器,需要* 45/3=15 次。而“容器最多可以装阿米巴 2 20 个”,即阿米巴* 15 次以后得到的个数是 2 20。题目要求我们计算*之前的阿米巴数,不妨使用倒推的方法,从第 15 次*之后的 2 20 个,倒推出第 15 次*之前(即第 14 次*之后)的个数,再进一步倒推出第 13 次*之后、第 12 次*之后、……第 1 次*之前的个数。
设第 1 次*之前的个数为 x 0 、第 1 次*之后的个数为 x 1 、第 2 次*之后的个数为 x 2 、……第 15 次*之后的个数为 x 15 ,则有
以下是引用片段:
x 14 =x 15 /2 、 x 13 =x 14 /2 、…… x n-1 =x n /2 (n ≥ 1)
因为第 15 次*之后的个数 x 15 是已知的,如果定义迭代变量为 x ,则可以将上面的倒推公式转换成如下的迭代公式:
x=x/2 (x 的初值为第 15 次*之后的个数 2 20)
让这个迭代公式重复执行 15 次,就可以倒推出第 1 次*之前的阿米巴个数。因为所需的迭代次数是个确定的值,我们可以使用一个固定次数的循环来实现对迭代过程的控制。参考程序如下:
以下是引用片段:
cls
x=2^20
for i=1 to 15
x=x/2
next i
print x
end
例 3 :验证角谷猜想。日本数学家角谷静夫在研究自然数时发现了一个奇怪现象:对于任意一个自然数 n ,若 n 为偶数,则将其除以 2 ;若 n 为奇数,则将其乘以 3 ,然后再加 1。如此经过有限次运算后,总可以得到自然数1。人们把角谷静夫的这一发现叫做“角谷猜想”。
要求:编写一个程序,由键盘输入一个自然数n ,把 n 经过有限次运算后,最终变成自然数 1 的全过程打印出来。
分析:定义迭代变量为 n ,按照角谷猜想的内容,可以得到两种情况下的迭代关系式:当 n 为偶数时, n=n/2 ;当 n 为奇数时, n=n*3+1。用 QBASIC 语言把它描述出来就是:
以下是引用片段:
if n 为偶数 then
n=n/2
else
n=n*3+1
end if
这就是需要计算机重复执行的迭代过程。这个迭代过程需要重复执行多少次,才能使迭代变量n 最终变成自然数1 ,这是我们无法计算出来的。因此,还需进一步确定用来结束迭代过程的条件。仔细分析题目要求,不难看出,对任意给定的一个自然数n ,只要经过有限次运算后,能够得到自然数 1 ,就已经完成了验证工作。因此,用来结束迭代过程的条件可以定义为:n=1。参考程序如下:
以下是引用片段:
cls
input Please input n=;n
do until n=1
if n mod 2=0 then
rem 如果 n 为偶数,则调用迭代公式 n=n/2
n=n/2
print —;n;
else
n=n*3+1
print —;n;
end if
loop
end

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
CAD具体是学什么的 cad学什么专业好 CAD属于什么课型 文胸36/80是什么尺码 21.22.23.24.25.这5个数横竖家起来都要等于69 21.22.23.24.25.5个数字横竖等于69怎么做 已知递增的等差数列{an}满足a1=1,a3=a2²-4,则an=? 已知递增等差数列an的前n项和为Sn,a1=1,且a2+1,a4+1,S4成等比数列 求数... 金鱼吊兰有什么作用,可供观赏改善风水 金鱼吊兰是什么植物? 迭代的应用实例 迭代的算法是什么? 我的海信手机感应不到U|M卡了,打不丁了电话了。 我的u盘检测不到,怎么办。 在聚美优品中怎样找卖家东西坏了 有关劳动合同法的论文 电脑检测不到U盘该怎么办? 期中小论文—劳动合同法中的违约金问题探析 为什么插入U盘就感应不到?? 浅论劳动者合法权益的法律保护的论文 电脑感应不到USB,到底是什么原因? 我要写论文求大家帮帮忙给点这个我国无固定期限劳动合同的立法缺陷以及解决措施 我要写一篇关于禁止解除劳动合同条款的法理分析的论文,谁能告诉我怎么写吗?主要是这个概念方面怎么写? 劳动合同法的论文 浅谈劳动合同解除的几个法律问题论文,法律论文论文 怎样预防劳动合同中的法律风险,法律论文 关于合同法,要600字的论文 求一篇劳动法的论文 《劳动法》论文(案例)题目 关于签订合同的论文 迭代法的算法 数学牛顿迭代法的例子 什么是迭代公式? 数学中的“迭代法”是什么啊?有什么用? 数列计算中的迭代法是什么啊?望各位助我一臂之力。 牛顿迭代法的示例 牛顿迭代法解高次方程详细过程谁能举一个简单易懂的例子啊? 怎样利用迭代法解决问题 雅可比迭代法的计算公式 用迭代法怎么解一元三次方程(数值分析的题)? G-S迭代法的计算公式 C语言中的迭代法 sor迭代算法的matlab程序 求教:什么叫求数列通项公式的“迭代法” 如何用haloop实现迭代算法,谁能给个简单的实例c语言或c++的。 如何自己安装电脑系统? 电脑怎么重装系统视频教程 电脑怎么用u盘重装系统视频 怎样重新组装电脑系统 系统重装 电脑怎么重装系统视