据说比达格斯理论家,又称一群在必达格斯领导下工作的古希腊数学家,发现在数字序列
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);
}
}