在递归函数 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
这是一种更简洁的声明变量的方法,它会在调用之间保持其值,而不是全局变量,后者也会不必要地污染全局命名空间。
我想在递归函数中声明一个变量 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
这是一种更简洁的声明变量的方法,它会在调用之间保持其值,而不是全局变量,后者也会不必要地污染全局命名空间。