迭代法
一、概念
迭代法百度迭代法也称辗转法,是一种不断用变量的旧值递推新值的过程,跟迭代法相对应的是直接法(或者称为一次解法),即一次性解决问题。迭代法又分为精确迭代和近似迭代。“二分法”和“牛顿迭代法”属于近似迭代法。迭代 算法是用计算机解决问题的一种基本方法。它利用计算机运算速度快、适合做重复性操作的特点,让计算机对一组指令(或一定步骤)进行重复执行,在每次执行这组指令(或这些步骤)时,都从变量的原值推出它的一个新值。
二、关键步骤
利用迭代算法解决问题,需要做好以下三个方面的工作:
1)确定迭代变量。在可以用迭代算法解决的问题中,至少存在一个直接或间接地不断由旧值递推出新值的变量,这个变量就是迭代变量。
2)建立迭代关系式。所谓迭代关系式,指如何从变量的前一个值推出其下一个值的公式(或关系)。迭代关系式的建立是解决迭代问题的关键,通常可以使用递推或倒推的方法来完成。
3)对迭代过程进行控制。在什么时候结束迭代过程?这是编写迭代程序必须考虑的问题。不能让迭代过程无休止地重复执行下去。迭代过程的控制通常可分为两种情况:一种是所需的迭代次数是个确定的值,可以计算出来;另一种是所需的迭代次数无法确定。对于前一种情况,可以构建一个固定次数的循环来实现对迭代过程的控制;对于后一种情况,需要进一步分析出用来结束迭代过程的条件。
三、一般结构
迭代变量赋值
while(循环条件) //可以表示为:!迭代终止条件
{
根据迭代关系式由迭代变量旧值计算出新值;
迭代变量新值取代旧值,为下一次做准备;
}
四、常见的迭代问题
1)猴子吃桃问题
#include<stdio.h>
int main(){
int i,x;
x=1; //迭代变量赋值
for(i=6;i>=1;i--) //
x=(x+1)*2; //迭代关系表达式,迭代过程中反复由原值推出新值
printf("小猴子共摘了%d个桃子\n",x); //
return 0;
}
2)求a的平方根
#include<stdio.h>
#include<math.h>
int main()
{
float a,x0,x1;
scanf(“%f”,&a);
x1=a/2; //迭代变量赋值
do{
x0=x1; //新值变旧值
x1=(x0+a/x0)/2; //利用迭代关系表达式计算新值
}while(fabs(x1-x0)>1e-5); //注意将迭代结束条件取反
printf(“sqrt(%.2f)=%f \n”,a,x1);
return 0;
}
3)求sinx的近似值
#include <stdio.h>
#include <math.h>
#define PI 3.14159
int main()
{
int i;
double x, t, s = 0;
scanf_s(“%lf”, &x);
x = x * PI / 180; //将输入的角度转换成弧度
t = x; //迭代变量赋初值
for (i=1;i<=100;i+=2)
{
s += t;
t = -t * x * x / ((2 * i) * (2 * i + i));//迭代关系表达式,旧值推出新值
}
printf("sin(%f)=%f", x, s);
return 0;
}