在递归函数 C++ 中声明变量

Declaring variable in recursive function C++

我想在递归函数中声明一个变量 w。我必须将其声明为 f(a)a 的某些函数),其中 a 是函数的参数。问题是该函数是递归的,每次调用递归函数时 w 都会更改值(因为 a 更改)

有没有办法让 w 固定到它的第一次初始化?

#include <iostream>
using namespace std;

void foo(int a)
{ 
    if(a==1) return 0;
    // int w = f(a);
    //...some more lines of code that use 'w'
    // eg. return foo(a - 1);
}

如果要使 'w' 成为常量,可以使用常量。定义常量可能因语言而异。

在您的情况下,您不能将 w 用作常量,因为当函数递归时 w 的值会发生变化。

但是如果你需要一个在程序运行期间不会改变其值的常量,那么,你绝对可以在全局或函数内部定义一个常量并使用该值。

希望你得到答案。 :)

实现在函数调用之间保持其状态的变量的最佳方法是使用 static 关键字。

int AddOne_Static(void) {
    static int a;
    
    a++;
    
    return a;
}

int AddOne(void) {
    int a;
    
    a++;
    
    return a;
}

int main(void) {
    printf("%d\n", AddOne_Static());
    printf("%d\n", AddOne_Static());
    printf("%d\n", AddOne_Static());
    
    printf("%d\n", AddOne());
    printf("%d\n", AddOne());
    printf("%d\n", AddOne());
}

输出将是:

1
2
3

1
1
1

这是一种更简洁的声明变量的方法,它会在调用之间保持其值,而不是全局变量,后者也会不必要地污染全局命名空间。