我希望在递归函数中声明变量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);
}
答案 0 :(得分:0)
如果你想让'w'成为常数,你可以使用常量。根据语言,定义常量可能会有所不同。
在你的情况下,你不能使用w作为常量,因为当函数递归时w的值会改变。
但是如果你需要一个不会在程序运行时改变其值的常量,那么你绝对可以在全局或函数内部定义一个常量并使用该值。
希望你得到答案。 :)
答案 1 :(得分:0)
实现在函数调用之间保持其状态的变量的最佳方法是使用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
这是一种更清晰的方式来声明一个变量,它将在调用之间保持其值而不是全局,这也会不必要地污染全局命名空间。