慎用Java递归调用
<
div id=”content” contentScore=”1177″>在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”,当到达一定值时,报如下错误:
