`
endual
  • 浏览: 3513678 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

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);	
		
	}

}

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics