递归函数如何控制静态变量的流量变化?

时间:2018-12-13 04:56:07

标签: c++ recursion

我正在尝试学习一些有关递归函数的知识,并且尝试运行此函数

void recurse()
{
   static int c = 1;
   if(c > 5)
      return ;
   printf("%d ",c);
   c = c + 1;
   recurse();
   printf("%d ",c);
}

int main()
{
   recurse();
   return 0;
}    

我希望它将给我这样的输出,类似于递归函数中调用的任何局部变量。

1 2 3 4 5 5 4 3 2 1

但是编译器给我这样的输出

1 2 3 4 5 6 6 6 6 6

我不明白为什么会出现这种输出。谁能解释?

1 个答案:

答案 0 :(得分:-1)

由于printf中的第二个recurse(),将打印6s系列。

在递归调用完成时,c的值已经增加到6。因此它将打印5次6。

如果您希望输出为1 2 3 4 5 5 4 3 2 1,请在适当的条件下使用另一个变量d并根据c的值对其进行递增/递减。

void recurse()
{
    static int c = 1; int d;

    if(c > 5) {
        d = d - 1;
         return ;
    }
    printf("Count = %d\n",c);
    d = c;
    c = c + 1;
    recurse();
    printf("Count = %d\n",d);
}

请参见演示here