慎用Java递归调用


在java语言中,使用递归调用时,如果过多的调用容易造成java.lang.StackOverflowError即栈溢出和程序执行过慢。这是一个潜在Bug和影响程序执行效率问题,需要谨慎使用。

下面先看造成java.lang.StackOverflowError即栈溢出问题:

public class RecursionTest
{

 public static void recursion(int totalTimes,int time)
 {
  if(totalTimes > 1)
  {
   System.out.println("这是第 " +  time + "次调用!");
   totalTimes--;
   time++;
   recursion(totalTimes, time);
  }
  else
  {
   System.out.println("调用结束,共调用了" + time + "次");
   return;
  }
 }
 
 public static void main(String[] args)
 {
  int totalTimes = 1000000;
  int time = 1;
  long startTime = System.currentTimeMillis();
  System.out.println("嵌套调用起始时间:" + startTime);
  recursion(totalTimes, time);
  System.out.println("嵌套调用结束时间:" + System.currentTimeMillis());
  System.out.println("总耗时:" + (System.currentTimeMillis() - startTime));
  System.out.println("------------------------------------------------------------");
 }

}

修改“totalTimes”,当到达一定值时,报如下错误:


在开发时,要注意避免该问题,特别是递归过多调用时,最好改为for或者whlie来代替
  • 1
  • 2
  • 下一页

相关内容

    暂无相关文章