首页 > 解决方案 > 使用静态变量的递归函数

问题描述

所以这个函数似乎需要使用静态函数,我意识到的问题是在递归函数结束之前没有办法重置静态var。有没有一种我没有看到的方法,或者有没有不使用静态变量的好方法。

这个函数的目标是首先用奇数 var 填充一个数组,所以假设你称之为 fillAryOddFirst(ary, 13) 那么数组将按以下顺序填充 [13, 11, 9, 7, 5, 3, 1、2、4、6、8、12]

void fillAryOddFirst(int ary[], int size) {
    static int pos;
    if (size <= 0) {
        return;
    }
    if(size % 2 != 0){
        ary[pos] = size;
        pos++;
    }
    fillAryOddFirst(ary, size-1);
    if(size % 2 == 0 ){
        ary[pos] = size;
        pos++;
    }    
    return;
}

标签: c++functionrecursionstatic

解决方案


不,没有办法重置局部static变量。

如果您希望能够重置它,您唯一的选择是将其设为全局变量,即将其声明移到函数之外。


另一种可能性是使其成为您通过引用传递的参数:

void fillAryOddFirst(int ary[], int size, int &pos)
{
    if (size <= 0)
    {
        return;
    }
    if (size % 2 != 0)
    {
        ary[pos] = size;
        pos++;
    }
    fillAryOddFirst(ary, size - 1, pos);
    if(size % 2 == 0 )
    {
        ary[pos] = size;
        pos++;
    }    
}

void fillAryOddFirst(int ary[], int size)
{
    int pos = 0;
    fillAryOddFirst(ary, size, pos);
}

推荐阅读