在递归中,如果我有以下示例代码
public class StringPractice {
public static void main(String[] args){
hello();
}
public static void hello(){
System.out.println("heloo world!");
hello();
}
}
它将导致StackOverFlowError。但是,如果我使用while循环,例如while(true)并打印函数hello,它会保持与输出循环,但不会给我们StackOverFlowError。有人可以解释一下原因吗?什么不同?
答案 0 :(得分:0)
你没有逻辑测试是否停止递归,所以一次又一次地调用该函数,添加到调用堆栈直到你的内存不足。
public class StringPractice {
public static void main(String[] args){
hello(10);
}
public static void hello(int n){
System.out.println("hello world! " + n);
hello(n - 1); // TODO do a test before calling this function again.
}
}