C语言迭代法详细讲解

文章描述:-2022年2月19日发(作者:technical writer)迭代法 迭代法也称辗转法,是一种不断用变量的旧值递推新值的过程,跟迭代法相对应的是直接法(或者称为一次解法),即一次性解决问题。迭代法又分为精确迭代和近似迭代。“二分法”和“牛顿迭代法”属于近似迭代法。 迭代算法是用计算机解决问题的一种基本方法。它利用计算机运算速度快、适合做重复性操作的特点,让计算机对一组指令(或一定步骤)

-

C语言迭代法详细讲解 2022年2月19日发(作者:technical writer)


迭代法
迭代法也称辗转法,是一种不断用变量的旧值递推新值的过程,跟迭代法相对应
的是直接法(或者称为一次解法),即一次性解决问题。迭代法又分为精确迭代和近
似迭代。“二分法”和“牛顿迭代法”属于近似迭代法。
迭代算法是用计算机解决问题的一种基本方法。它利用计算机运算速度快、适合
做重复性操作的特点,让计算机对一组指令(或一定步骤)进行重复执行,在每次执
行这组指令(或这些步骤)时,都从变量的原值推出它的一个新值。
利用迭代算法解决问题,需要做好以下三个方面的工作:
一、确定迭代变量。在可以用迭代算法解决的问题中,至少存在一个直接或间接
地不断由旧值递推出新值的变量,这个变量就是迭代变量。
二、建立迭代关系式。所谓迭代关系式,指如何从变量的前一个值推出其下一个
值的公式(或关系)。迭代关系式的建立是解决迭代问题的关键,通常可以使用递推
或倒推的方法来完成。
三、对迭代过程进行控制。在什么时候结束迭代过程?这是编写迭代程序必须考
虑的问题。不能让迭代过程无休止地重复执行下去。迭代过程的控制通常可分为两种
情况:一种是所需的迭代次数是个确定的值,可以计算出来;另一种是所需的迭代次
数无法确定。对于前一种情况,可以构建一个固定次数的循环来实现对迭代过程的控
制;对于后一种情况,需要进一步分析出用来结束迭代过程的条件。
例 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 分钟后容器内充满了阿米巴。已知容器
最多可以装阿米巴 220,220个。试问,开始的时候往容器内放了多少个阿米巴?请
编程序算出。
分析: 根据题意,阿米巴每 3 分钟分裂一次,那么从开始的时候将阿米巴放入
容器里面,到 45 分钟后充满容器,需要分裂 453=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=x2 ( x 的初值为第 15 次分裂之后的个数 2^20 )
让这个迭代公式重复执行 15 次,就可以倒推出第 1 次分裂之前的阿米巴个
数。因为所需的迭代次数是个确定的值,我们可以使用一个固定次数的循环来实现对
迭代过程的控制。参考程序如下:
cls
x=2^20
for i=1 to 15
x=x2
next i
print x
end
ps:java中幂的算法是(2, 20);返回double,稍微注意一下
例 3 : 验证谷角猜想。日本数学家谷角静夫在研究自然数时发现了一个奇怪现
象:对于任意一个自然数 n ,若 n 为偶数,则将其除以 2 ;若 n 为奇数,则将
其乘以 3 ,然后再加 1 。如此经过有限次运算后,总可以得到自然数 1 。人们把
谷角静夫的这一发现叫做“谷角猜想”。
要求:编写一个程序,由键盘输入一个自然数 n ,把 n 经过有限次运算后,最
终变成自然数 1 的全过程打印出来。


分析: 定义迭代变量为 n ,按照谷角猜想的内容,可以得到两种情况下的迭代
关系式:当 n 为偶数时, n=n2 ;当 n 为奇数时, n=n*3+1 。用 QBASIC 语
言把它描述出来就是:
if n 为偶数 then
n=n2
else
n=n*3+1
end if
这就是需要计算机重复执行的迭代过程。这个迭代过程需要重复执行多少次,才
能使迭代变量 n 最终变成自然数 1 ,这是我们无法计算出来的。因此,还需进一步
确定用来结束迭代过程的条件。仔细分析题目要求,不难看出,对任意给定的一个自
然数 n ,只要经过有限次运算后,能够得到自然数 1 ,就已经完成了验证工作。因
此,用来结束迭代过程的条件可以定义为: n=1 。参考程序如下:
cls
input input n=
do until n=1
if n mod 2=0 then
rem 如果 n 为偶数,则调用迭代公式 n=n2
n=n2
print —
else
n=n*3+1
print —
end if
loop
end
迭代法开平方:
#include
#include
void main()
{
double a,x0,x1;
printf(a:n
scanf(为什么在VC6.0中不能写成“scanf(?
if(a<0)
printf(
else
{

-

C语言迭代法详细讲解

发布时间:2022-02-19 01:50:13
文章版权声明:除非注明,否则均为IT技术网-学习WEB前端开发等IT技术的网络平台原创文章,转载或复制请以超链接形式并注明出处。

发表评论

评论列表 (有 12 条评论,292人围观)

最近发表

随便看看

热门文章

标签列表