首页 > 解决方案 > 静态变量的递归函数控制流程如何变化?

问题描述

我正在尝试学习一些有关递归函数的东西,并尝试运行它

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

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

标签: c++recursion

解决方案


由于. printf_recurse()

到递归调用完成时, 的值c已经增加到 6。因此它将打印 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);
}

在此处查看演示。


推荐阅读