Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/155.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在递归函数C+中声明变量+;_C++_Variable Declaration - Fatal编程技术网

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

C++ 在递归函数C+中声明变量+;,c++,variable-declaration,C++,Variable Declaration,我希望在递归函数中声明一个变量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

我希望在递归函数中声明一个变量
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);
}
#包括
使用名称空间std;
无效foo(int a)
{ 
如果(a==1)返回0;
//int w=f(a);
//…更多使用“w”的代码行
//例如返回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

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

如果我们知道您使用的语言(提示:标记),这将有所帮助如果你把你当前的工作包含代码或者伪代码来说明你在说什么,我用C,我甚至可以使用C++。请给我们解释一个“常数”的确切含义,即每次调用函数时都会改变值。如果值根据函数参数而改变,那么它就不是真的常数。是吗?如果x依赖于变量“a”,而变量“a”不是常数,那么x怎么可能是常数呢?你不能将其声明为const我在哪里初始化“a”?抱歉我不清楚,如果未声明,它们将自动初始化为零;如果多次声明该值,它们不会被覆盖:对此进行了详细解释clearly@GMoney
AddOne
中的
a
未初始化。@LogicStuff根据C99标准中的6.7.8/10,该值将显式设置为零,因为它是算术类型。@GMoney“如果没有显式初始化具有自动存储持续时间的对象,则其值是不确定的”-
AddOne
中的a具有自动存储持续时间。在回答C++问题时,请参阅C++标准。不需要“全局”。只需在函数中声明一个
静态常量
。@Lundin-这很有效!