举例说明迭代算法
来源:互联网 发布:网易163imap设置端口 编辑:程序博客网 时间:2024/05/17 05:12
迭代算法的定义:
迭代法也称辗转法,是一种不断用变量的旧值递推新值的过程,跟迭代法相对应的的直接法(或者称为一次解法),即一次性解决问题。迭代法又分为精确迭代和近似迭代。“二分法”和“牛顿迭代法”属于近似迭代法。迭代算法是让计算机对一组指令(或一定步骤)进行重复执行,在每次执行这组指令(或这些步骤)时,都从变量的原值推出它的一个新值。
利用迭代法解决问题的步骤如下:
一、确定迭代变量。在可以利用迭代法解决问题时,至少存在一个直接或间接的不断由旧值递推出新值的变量,这个变量就是迭代变量。
二、建立迭代关系式。所谓迭代关系式,指如何从变量的上一个值推出下一个值的公式(或公式)。这个关系式是解决问题的关键,通常可以通过递推或者倒推的方法来完成。
三、对迭代过程进行控制。即必须考虑什么时候结束迭代过程。迭代过程的控制通常可分为迭代次数确定和不确定两种情况。对于次数确定可以用一个循环来实现迭代过程的控制;对于迭代次数不确定的需要分析出用来结束迭代的条件。
举例说明如下:
例一:用来计算两个正整数a,b最大公约数欧几里德算法(也称辗转相除法);
定理:若c是a和b的公约数,那么c也是b和(a mod b)的公约数(其中a>b,并且a mod b不为0)。(这个定理在此就不证明了)。
例子:求30和12的最大公约数,并输出这些公约数。
程序如下所示:
/**
* greatest common divisor最大
* 公约数简写为GCD
*
* @author Administrator
*/
public class GCD {
public static void main(String args[]){
GCD gcd=new GCD();
System.out.println(gcd.gcd(12,30));
}
public int gcd(int a,int b){
if(b==0){
return a;
}
else{
while(b!=0){
int r=a%b;
a=b;
b=r;
}
return gcd(a,b);
}
}
}
运行结果如下:
run:
6
成功生成(总时间:0 秒)
例二:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第四个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?
解析:每个月兔子的对数变化为:1、1、2、3、5、8、13、21···
这是一个斐波那契(Fibonacci)数列,它的规律是后一个值是前两个值的和。
程序如下所示:
public class Rabbit {
public static void main(String args[]){
Rabbit r=new Rabbit();
System.out.println(r.total(10)*2);
}
public int total(int i){
if(i==1||i==2){
return 1;
}
else{
return total(i-1)+total(i-2);
}
}
}
运行结果如下:
run:
110
成功生成(总时间:0 秒)
- 举例说明迭代算法
- 迭代算法 JAVA
- 迭代算法 JAVA
- jacobi迭代算法
- 信道容量迭代算法
- 迭代算法
- 下降迭代算法
- 牛顿迭代算法
- 浅谈迭代算法
- 迭代算法
- 迭代算法讲解
- 迭代算法
- 迭代优化算法
- 算法---迭代
- 迭代修正算法
- 迭代算法
- 迭代跟递归算法
- 离散信道容量迭代算法
- win7主机访问虚拟机centos6.3 web
- isight5 二次开发之 Application (4) 之 SimCode
- SQL到底该怎么发音: S-Q-L or Sequel?
- HTTP动态自适应流媒体现状
- 当你浮躁的时候,看看这篇文章
- 举例说明迭代算法
- Uva 11888 - Abnormal 89's
- js:将时间obj转为json字符串
- The Program of Algorithms ------- Diveide and Conquer ---- Merge Sort
- EXP-00091 正在导出有问题的统计信息 问题的解决(转)
- 分数
- comdlg32.ocx 注册问题
- C++析构函数为什么要为虚函数
- 只有mdf文件和ldf文件,怎么恢复数据库。