gpt4 book ai didi

java - 递归函数可以在函数的原始调用中更改变量吗?

转载 作者:太空宇宙 更新时间:2023-11-04 15:34:04 24 4
gpt4 key购买 nike

例如。假设我有一个名为 recursionFunction 的函数。在此函数中,我将变量 userInput 设置为等于用户输入的值,然后调用函数本身。递归中输入的用户输入是否会更改原始变量?

我的查询来 self 对范围和地址的浅薄理解。如果函数不同,则不应将变量识别为相同的变量。但它是“相同的功能”,不是吗?它在 RAM 中应该有相同的地址,因此被覆盖了吗?或者尽管在具有相同变量名的相同函数中,它不会有相同的地址吗?

忽略这样一个函数会导致无限循环的事实。假设我有办法停止程序。这不是一个意见问题,它显然只会像我描述的那样发生。提前谢谢你。

我主要从事 Java 工作,我正在尝试学习 C++,这就是包含这些标签的原因。

编辑:模拟代码(同样,我知道会发生无限循环,让我们假装它不会发生)递归是否会更改原始调用中的 userInput 变量?

int recursionFunction()
{
int userInput;

std::cin >> userInput;

recursionFunction();

return 0;
}

最佳答案

您实际上是在问在递归调用期间局部变量发生了什么。答案很简单——每个函数调用都有自己的栈帧,即这些局部变量彼此完全隔离。此图可以帮助:( source )

enter image description here

它显示执行此代码后的堆栈:

function f(int x, int y) {
int a;
if ( term_cond ) return ...;
a = .....;
return g(a);
}

function g(int z) {
int p,q;
p = ...; q = ...;
return f(p,q);
}

关于java - 递归函数可以在函数的原始调用中更改变量吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39829624/

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