Java 递归vs循环?
有人能解释一下这两种方法的区别吗 方法1Java 递归vs循环?,java,Java,有人能解释一下这两种方法的区别吗 方法1 public void run(){ run(); } 方法2 public void run(){ while(true){ } } 示例1是一个永不停止调用自身的方法。每次调用该方法时,都会向callstack添加一个新的帧,直到出现StackOverflowerError 示例2是一个无限循环。该方法只被添加到调用堆栈中一次。好吧,递归方法最终会崩溃。当使用递归时,在程序运行到无法显示该方法的大小之前,只能执行一定
public void run(){
run();
}
方法2
public void run(){
while(true){
}
}
示例1是一个永不停止调用自身的方法。每次调用该方法时,都会向callstack添加一个新的帧,直到出现StackOverflowerError
示例2是一个无限循环。该方法只被添加到调用堆栈中一次。好吧,递归方法最终会崩溃。当使用递归时,在程序运行到无法显示该方法的大小之前,只能执行一定的级别 使用while-true循环,而不需要任何其他代码永远运行,因为不再有对另一个方法的调用,所以您不再对堆栈执行任何操作 递归一次又一次地调用同一个方法,这需要“空间”来放置该方法(就像一堆方法),一旦堆太大,程序就会退出。使用递归有一些优点,但通常循环更合适
(即使是while-true循环,也可以以“break”终止)通常,Java中的每个线程都有一个称为调用堆栈的东西。每个方法的执行都会进入堆栈,如果一个方法执行另一个方法,然后再执行另一个方法,那么调用堆栈上的方法就很少了 RandomObject.method1().method2().method3() 将为您提供一堆: 方法3() 方法2() 方法1() 问题是堆栈的空间有限,递归会很快将其填满,从而导致令人讨厌的StackOverFlow异常 就你的情况来看 run().run().run()(..) 所以stack看起来: (……) 运行() 运行() 运行()
第二个选项在调用堆栈上只有一个方法,它将无限循环而不会崩溃。1个方法将被递归调用
第二个方法将被称为一种类型,但它将在循环无限次时被卡在内部。它不会从循环中出来。可能的重复一个是无限递归的,另一个是无限循环?看到这个可能的重复谢谢大家,但我认为它更复杂,我会给出更详细的答案。但是我知道这是最基本的方法StackOverflowerError会出现你能解释一下异常和错误之间的区别吗?在Java中,异常是应用程序可以恢复的东西。开发人员应该捕获异常。错误是一种无法恢复的情况,不应被捕获。