package test.etc;
public class DiGuiTest { public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println(diGui(3, 9708));
System.out.println("-----------------");
System.out.println(loop(3, 9708));
} private static int loop(int i, int j) {
// TODO Auto-generated method stub
int c=0;
while (--j >= 0) {
c += i;
}
return c;
} private static int diGui(int i, int j) {
// TODO Auto-generated method stub
int c = 0;
if (--j >= 0) {
c = diGui(i, j) + i;
}
return c;
}
}两个方法结果相同,但是用递归的那个 如果把j调大一点 就报错了(Eclipse的那个红色的灯一直亮  cpu占用率100%  风扇声音变成拖拉机)
是什么原因啊,  int的取值范围远比这个大啊。另外问一下 用java写递归是不是性能不好啊,好像记得有人说java不要用递归。

解决方案 »

  1.   

    我运行了你的程序,我把参数调到了9711(9710时正常)时出现了错误,虚拟机出现了stackoverflowerrer。
    Exception in thread "main" java.lang.StackOverflowError
    at DiGuiTest.diGui(DiGuiTest.java:30)
    at DiGuiTest.diGui(DiGuiTest.java:30)
    at DiGuiTest.diGui(DiGuiTest.java:30)
                                .
                                .
                                .
    at DiGuiTest.diGui(DiGuiTest.java:30)这句话打印了1024遍。
    所以应该不是超出了int类型的范围。
      

  2.   

    java虚拟机给每个线程都分配一个栈,递归太深就发生了栈溢出。