浏览 2929 次
锁定老帖子 主题:递归有好有坏的……
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (3)
|
|
---|---|
作者 | 正文 |
发表时间:2009-03-22
最后修改:2009-03-22
举个例子 斐波那契数吧 以下是分别用两者实现的。请比较 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产个四核了…… 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2009-03-23
个人感觉 递归更接近于数学思维……迭代更接近于计算机思维
|
|
返回顶楼 | |
发表时间:2009-03-23
"迭代和递归,各有各的好,在我看来,递归好了程序员,害了电脑,而迭代相反,他要求程序员为程序考虑的很多,运行起来就会好很多。 "
也未必。就看程序怎么写了 |
|
返回顶楼 | |
发表时间:2009-03-23
递归有一个很大的优势:递归的过程往往是自描述的,而迭代则往往需要外部的指令,比如迭代次数.递归是自己检测到停止,而迭代"我告诉你什么时候停,你就什么时候停",所以在一些自适应的系统里,无法得到外部的指令(迭代次数),则只能用递归.还有很多函数式语言(比如Erlang),这些语言是不允许改变变量值的,所以无法通过指令式的方式进行,只能用递归.
|
|
返回顶楼 | |
发表时间:2009-03-23
递归是很方便程序员思考的,思路非常的清晰,但是资源浪费很严重
而迭代是相当高效的计算方法。 我推崇的方式就是用递归来思考问题,然后寻找是否有可能由递归方法转换成用迭代的方法来解决。 |
|
返回顶楼 | |
发表时间:2009-03-23
lz例子跟要说明的意图容易产生误解
|
|
返回顶楼 | |
发表时间:2009-03-23
Element&lina 写道 lz例子跟要说明的意图容易产生误解
何以见得,请不吝赐教 |
|
返回顶楼 | |
发表时间:2009-03-25
汉诺塔用迭代要怎么写?
|
|
返回顶楼 | |