读书人

java递归的一个有关问题

发布时间: 2012-09-10 22:20:12 作者: rapoo

java递归的一个问题

据说比达格斯理论家,又称一群在必达格斯领导下工作的古希腊数学家,发现在数字序列

1,3,6,10,15,21 中有奇怪的联系

这个数列中第n项由第n-1项加n得到的。

效率问题

调用一个方法会有一定的额外开销。控制必须从这个调用的位子转移到这个方法的开始处。除次之外,传给这个方法的参数以及
这个方法返回的地址都要黑压入到一个内部的栈中。为的是这个方法可以访问参数值。知道返回到哪里去。

就这个问题来说,因为上述开销造成的结构,可能while方法执行速度比递归快。在此题中,递归的
代价是不大的。但是如果由于递归的存在,造成了太大规模的方法调用外,科恩能够会考虑消除递归。

另外一个低效率在系统内存空间存储所有的中间参数以及返回值,如果有大量的数据需要存储,这就会引起栈溢出了
人们常常采用递归,是因为它从概念上简化了问题,而不是因为它本质上更加有效。

?

?

package endual;public class TriangleQuestion {/** * 使用循环来求这个问题 * @param n * @return */public static int compute(int n) {int result = 0 ;for (int i=1; i<=n; i++) {result = result + i ;}return result ;}/** * 使用递归来求解这个问题 * @param n * @return */public static int computeDiGui(int n) {int rs = 0 ;if (n>=1) {   rs =n + TriangleQuestion.computeDiGui(n-1);}   return rs ;}/** * 使用递归来求解这个问题 * @param n * @return */public static int computeDiGui2(int n) {      if(n==1) {      return 1 ;            }        return n + TriangleQuestion.computeDiGui(n-1);} // end}

?

?

?

?

测试类

package endual;public class Main {/** * @param args */public static void main(String[] args) {// TODO Auto-generated method stub        int res = TriangleQuestion.computeDiGui(4) ;    System.out.println(res);}}

?

读书人网 >编程

热点推荐