代码之家  ›  专栏  ›  技术社区  ›  ab123

在递归函数C++[闭合]中声明变量

  •  -1
  • ab123  · 技术社区  · 8 年前

    我想声明一个变量 w 递归函数内部。我必须申报为 f(a) (某些功能 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 回复  |  直到 5 年前
        1
  •  2
  •   GMoney    5 年前

    实现在函数调用之间保持其状态的变量的最佳方法是使用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
    

    这是一种更干净的方法,可以声明一个变量,在调用之间保持其值,而不是一个全局变量,后者也会不必要地污染全局名称空间。

        2
  •  1
  •   Tharushi Geethma    8 年前

    如果你想让“w”成为常数,你可以使用常数。定义常数可能因语言而异。

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