在递归函数中声明变量

时间:2017-08-29 08:41:44

标签: 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 use 'w'
    // eg. return foo(a - 1);
}

2 个答案:

答案 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

这是一种更清晰的方式来声明一个变量,它将在调用之间保持其值而不是全局,这也会不必要地污染全局命名空间。