歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

慎用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來代替。
Copyright © Linux教程網 All Rights Reserved