递归vs循环?

时间:2014-04-02 07:36:27

标签: java

有人可以解释两种方法之间的区别吗?

方法1

public void run(){
    run();
}

方法2

public void run(){
   while(true){

   }    
}

4 个答案:

答案 0 :(得分:6)

示例1是一种永不停止调用自身的方法。每次调用该方法时,都会向callstack添加一个新帧,直到我认为存在StackOverflowError。

示例2是无限循环。该方法只被添加到callstack一次。

答案 1 :(得分:0)

好吧,递归的最终会崩溃。使用递归时,只能在程序超出规模之前达到一定的水平,以便放置方法。

使用while true循环,没有任何其他代码应该永远运行,因为没有其他方法的调用,你不再对堆栈做任何事情了。

递归一遍又一遍地调用相同的方法,这需要" space"把方法(就像一堆方法),一旦桩太大,你的程序就会退出。使用递归有一些优点,但通常情况下循环更合适。

(即使是一段时间,您也可以通过' break'

来终止。)

答案 2 :(得分:0)

通常,Java中的每个线程都有一个称为调用堆栈的东西。每个方法执行都进入堆栈,如果一个方法执行另一个方法,然后另一个方法最终在调用堆栈上有几个方法。

  

RandomObject.method1()。方法2()。方法3()

会给你堆叠:

  

method3()

     

method2()

     

方法1()

问题是堆栈空间有限,递归会很快填满它,给你讨厌的StackOverFlow Exception。

在你的情况下,它看起来像

  

run()。run()。run()(..)

所以堆栈会看起来:

  

(...)

     

run()的

     

run()的

     

run()的

第二个选项在调用堆栈上只有一个方法,它会无限循环而不会崩溃..

答案 3 :(得分:0)

第一种方法将被称为递归

第二种方法将被称为一种类型,但它将被卡在内部,而循环无限次......它不会从循环中出来。