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

标签 java recursion objectinstantiation

目前正在从事递归实践/实现,并注意到一些与我所知道的编程中的真实情况背道而驰的东西。

递归方法

protected int getArea() {

    if(width <= 0)
        return 0;
    else if(width == 1)
        return 1;
    else {

        Triangle t2 = new Triangle(width - 1);
        int area = t2.getArea();//Area variable somehow is holding the values of previous calls, despite being instantiated in each new call?

        return area + width;

    }

}

不知何故,局部变量area正在聚合递归方法中先前调用的值。当每次调用时都会实例化它,这怎么可能?在每次调用中,似乎都会再次调用 getArea() 方法,从而防止 area 变量由于 getArea() 而保存任何内容> 调用发生在方法return 语句之前。

这是怎么发生的?

最佳答案

每个方法调用的详细信息都存储在堆栈中,一旦从方法调用返回值,执行就会返回到调用当前方法的前一个方法、局部变量值等。将存储在堆栈上,这就是程序需要时在执行中使用这些值的方式。围绕递归程序进行一些实验以了解更多信息。

我的建议是尝试在 Eclipse 或 Intellij 等 IDE 上使用断点来调试递归程序,这会消除很多困惑并让我们清楚递归的工作原理。

关于java - 递归中的局部变量保留值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53236667/

相关文章:

algorithm - 2^n mod (m) 算法

python - 带有递归调用的 return 语句如何在 Python 中保存中间值?

recursion - 用 "E"边计算所有可能连通的平面图

python - 动态实例化对象

java - 类实例化与通过引用检索

java - 不使用 new 运算符实例化对象

java - 如何拆分 PlatformUI.getWorkbench().restart() 步骤?

java - 未找到 maven 包类 selenium Web 驱动程序

java - 如何在Intellij IDEA中找到注释的Processor类?

java - Hibernate 模型对象作为 VO 对象