java - try-catch 语句中的递归调用

标签 java recursion

我有以下代码片段:

public static void main(String[] args) {
    foo();
}
public static void foo() {
    try {
        foo();
    } catch (Throwable t) {
        foo();
    }
}

谁能解释一下这是怎么回事?请详细说明。

<小时/>

我已经更改了这一部分并添加了 println 方法来显示一些内容:

...
try {
    System.out.println("+");
    foo();
} catch (Throwable t) {
    System.out.println("-");
    foo();
}
...

我收到这样的信息(该过程尚未停止):

+
+
+
+
+--
+--
+
+--
+--
+
+
+--
+--
+
+--
+--
+
+
+
+--
+--

最佳答案

foo 退出的唯一方法是 stackoverflow。我们可以通过以下方式模拟效果

public static void foo(int i)
{
    if(i>=N) return; // stack too deep

    foo(i+1);
    foo(i+1);
}

对于最大堆栈深度来说,这是指数级昂贵的。

在我的机器上,花费的时间约为6ns * 2^N

最大堆栈深度超过 10,000,因此大约需要

        10000000000000000000000000000000
        .... 
        (thousands of zeros)  
        ... 
        00000000000000000000000000000000 

完成该计划的年数,给出或采用一个常数因子:)

关于java - try-catch 语句中的递归调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32319161/

相关文章:

c# - c#中的递归自定义配置

java - 递归中的局部变量保留值?

c++ - 数组元素打印的递归方法

javascript - 在数组上使用递归

ruby - 查找二叉树的叶子

java - 手动生成人脸上下文

java - 如果在我的表达之后需要词法分析器怎么办?

安卓中的java3d

java - Tomcat 上的 JSP 显示为源,而不是作为 JSP 处理

java - 模拟具有固定工作量的 CPU 密集型任务