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

Cut*_*ter 0 c++ java recursion function

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

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

忽略这样的函数将导致无限循环的事实。让我们假装我有一种停止程序的方法。这不是一个意见问题,很明显只会像我描述的那样发生。先感谢您。

我主要使用Java工作,并且尝试学习C ++,这就是为什么包含这些标记的原因。

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

int recursionFunction()
{
    int userInput;

    std::cin >> userInput;

    recursionFunction();

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

Mil*_*kic 5

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

在此处输入图片说明

执行以下代码后,它将显示堆栈:

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);
}
Run Code Online (Sandbox Code Playgroud)