Как рекурсивная функция управления потоком изменяет статическую переменную? - PullRequest
0 голосов
/ 13 декабря 2018

Я пытаюсь узнать кое-что о рекурсивной функции, и я пытаюсь запустить это

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;
}    

Я ожидаю, что она выдаст мне такой же вывод, как и любая локальная переменная, вызываемая в рекурсивнойfunction.

1 2 3 4 5 5 4 3 2 1

Но компилятор дает мне вывод, подобный этому

1 2 3 4 5 6 6 6 6 6

Я не могу понять, почему вывод такого рода происходит.Кто-нибудь может объяснить?

1 Ответ

0 голосов
/ 13 декабря 2018

Серия 6s печатается из-за второго 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);
}

См. демонстрационную версию здесь .

...