gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 17:47:41 25 4
gpt4 key购买 nike

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

递归方法

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com