在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”,當到達一定值時,報如下錯誤: