递归和循环

时间:2016-01-13 23:10:55

标签: java loops recursion

在递归中,如果我有以下示例代码

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。有人可以解释一下原因吗?什么不同?

1 个答案:

答案 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.
    }
}