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不要用递归。
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不要用递归。
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类型的范围。