迭代和递归,各有各的好,在我看来,递归好了程序员,害了电脑,而迭代相反,他要求程序员为程序考虑的很多,运行起来就会好很多。
举个例子 斐波那契数吧
以下是分别用两者实现的。请比较
package chap18;
import java.util.Scanner;
//用递归法是实现的斐波那契数
public class febo {
/**
* @param args
*/
public static void main(String[] args) {
while(true)
{
System.out.println("请输入你要计算的那项");
Scanner cin = new Scanner(System.in);
int n = cin.nextInt();
MyTimer myTimer = new MyTimer();
myTimer.start();
System.out.println(feibo(n));
myTimer.end();
System.out.println("用时 "+myTimer.getUseTime()+"毫秒");
}
}
/*
* 斐波那契方法
* @param n 要求的那项位置
* @return 结果
*/
public static int feibo(int n)
{
if(n <= 2)
return 1;
else
{
return feibo(n-1)+feibo(n-2);
}
}
}
运行结果:
请输入你要计算的那项
40
102334155
用时 1500毫秒
请输入你要计算的那项
package chap18;
import java.util.Scanner;
/*
* 采用迭代方法解决的斐波那契数列
*/
public class feibo1 {
/**
* @param args
*/
public static void main(String[] args) {
while(true)
{
System.out.println("请输入你要计算的那项");
Scanner cin = new Scanner(System.in);
int n = cin.nextInt();
MyTimer myTimer = new MyTimer();
myTimer.start();
System.out.println(feibo(n));
myTimer.end();
System.out.println("用时 "+myTimer.getUseTime()+"毫秒");
}
}
/*
* 斐波那契方法 采用迭代方法解决
* @param n 要求的那项位置
* @return 结果
*/
public static int feibo(int n)
{
int start1 = 1;
int start2 = 1;
for(int i = 2; i < n; i++)
{
int temp = start1+start2;
start1 = start2;
start2 = temp;
}
return start2;
}
}
运行结果:
请输入你要计算的那项
40
102334155
用时 0毫秒
请输入你要计算的那项
还有啊,开个玩笑,如果把n取到50(不用很大,50足矣),用第一种,只有指望intel产个四核了……
分享到:
- 2009-03-22 22:13
- 浏览 1294
- 评论(8)
- 论坛回复 / 浏览 (6 / 2905)
- 查看更多
相关推荐
第 章 递归…………………………… 递归的概念 …………………… 递归程序设计………………… 分治与递归 ………………… 动态规划 …………………… 回溯与递归 ………………… 模拟递归 ……………………… 应用 ...
c++ 递归 阶乘 n!c++ 递归 阶乘 n!c++ 递归 阶乘 n!c++ 递归 阶乘 n!c++ 递归 阶乘 n!c++ 递归 阶乘 n!c++ 递归 阶乘 n!c++ 递归 阶乘 n!c++ 递归 阶乘 n!c++ 递归 阶乘 n!c++ 递归 阶乘 n!c++ 递归 阶乘...
宏递归宏递归宏递归宏递归宏递归宏递归宏递归宏递归宏递归宏递归
C#递归C#递归C#递归C#递归C#递归C#递归C#递归C#递归C#递归
5.1.1、递归介绍…………………………………………………………………………7 5.1.2、使用到的函数和变量……………………………………………………………8 5.1.3、具体运行结果…………………………………………...
.net 递归算法.net 递归算法.net 递归算法.net 递归算法.net 递归算法.net 递归算法.net 递归算法.net 递归算法
文件递归-XML递归-树图递归 面试中的常见递归算法:附带截图和详细代码
递归和非递归方式计算Ackerman函数。非递归方法用堆栈实现。代码内部有详细的注释说明,比较适于学习。
快速选择非递归与递归算法实现
n后问题---递归回溯法 n后问题---递归回溯法 n后问题---递归回溯法 n后问题---递归回溯法 n后问题---递归回溯法 n后问题---递归回溯法 n后问题---递归回溯法 n后问题---递归回溯法 n后问题---递归回溯法 n后问题---...
包含多个经典的递归应用代码: 1.fibonacci.c 是斐波拉契数列递归解法 2.hanoi.c 是汉诺塔递归算法 3.permutation.c 是全排列递归算法 4.queen.c 是八皇后递归算法 5. reverse.c 是递归的测试代码 6.strlrn.c 是求...
ackman函数的递归和非递归,学习数据结构的素材,非递归是使用堆栈实现的。
1、此程序为汉诺塔程序(此代码用到递归,包括直接递归和间接递归(间接递归是用在了重复使用本程序那块)); 2、此程序的代码流程是,由main函数进入之后,先后调用的函数是由上至下定义的; 3、亲爱的朋友,请...
c++实现的合并排序算法 用递归和非递归两种方式实现的
包含一下方法: 1.通过一个数组来构造一颗二叉树 2.通过一个数组来构造一颗完全二叉树 3.使用递归 先序遍历一棵二叉树 4.使用递归 中序遍历一棵二叉树 5.使用递归 后序遍历一棵二叉树 ...PS2:每句代码都有详细注释
递归动态树递归动态树递归动态树递归动态树递归动态树递归动态树递归动态树递归动态树递归动态树递归动态树递归动态树递归动态树递归动态树递归动态树递归动态树递归动态树递归动态树递归动态树递归动态树递归动态树...
二叉树递归与非递归遍历
这个分类里面不好选,有可能选错分类了,但是如果你学编程,一定要学数据结构与算法的。递归很好用,也很难用。
递归在计算学科中是一种非常重要的方法,计算理论中到处都有用递归进行表述的问题及求解方法。 在程序设计中,数据描述和算法表达也常用递归,通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题...
" …………………………………………. 自己调用自己 递归 – 德罗斯特效应 递归 – 定义 递归:程序调用自身 形式:在函数定义有直接或间接 调用自身 递归 - 阶乘 def p(n): x = 1 i = 1 while( i ): x = x * i i= i...