日期:2014-05-20  浏览次数:20766 次

Exception in thread "main" java.lang.StackOverflowError .
package 折半递归非递归;


public class RecursiveTest {  
 /** * 递归实现 * * @param n * @return */  
 public static double recursive(long n) {
  if (n == 1) {
  return Math.log(1);  
  } 
  else {  
  return Math.log(n) + recursive(n - 1);  
  }  
  }  
 /** * 非递归实现 * * @param n * @return */  
 public static double directly(long n) {
  double result = 0;  
  for (int i = 1; i <= n; i++) {  
  result += Math.log(i);  
  }  
  return result;  
  }  
 public static void main(String[] args) {  
  int i = 5000000;  
 
  long test = System.nanoTime();  
  long start1 = System.nanoTime();  
  double r1 = recursive(i);  
  long end1 = System.nanoTime();  
  long start2 = System.nanoTime();  
  double r2 = directly(i);  
  long end2 = System.nanoTime();  
  System.out.println("recursive result:" + r1);  
  System.out.println("recursive time used:" + (end1 - start1));  
  System.out.println("non-recursive result:" + r2);  
  System.out.println("non-recursive time used:" + (end2 - start2));  
  }  
 } 

运行后JAVA控制台输出:

 Exception in thread "main" java.lang.StackOverflowError
 at 折半递归非递归.RecursiveTest.recursive(RecursiveTest.java:11)
 at 折半递归非递归.RecursiveTest.recursive(RecursiveTest.java:11)
 at 折半递归非递归.RecursiveTest.recursive(RecursiveTest.java:11)

请问如何解决

------解决方案--------------------
用递归出现这种情况很正常啊,而且,你的i非得那么大么?
------解决方案--------------------
调大内存。。。。那其他没有办法了。。。