Понимание рекурсии на примере пивной бутылки

Я сам практикую рекурсию в Си, и я нашел этот пример в Интернете. Однако есть одна вещь, которую я не понимаю.

void singSongFor(int numberOfBottles)
{
if (numberOfBottles == 0) {
    printf("There are simply no more bottles of beer on the wall.\n\n");
} 
else {
    printf("%d bottles of beer on the wall. %d bottles of beer.\n",
           numberOfBottles, numberOfBottles);
    int oneFewer = numberOfBottles - 1;
    printf("Take one down, pass it around, %d bottles of beer on the wall.\n\n",
           oneFewer);
    singSongFor(oneFewer); // This function calls itself!

    // Print a message just before the function ends
    printf("Put a bottle in the recycling, %d empty bottles in the bin.\n",
             numberOfBottles);
   }
}    

Тогда я использую основной метод как таковой:

 int main(int argc, const char * argv[])
{
  singSongFor(4);
  return 0;
}

И вывод как таковой:

4 бутылки пива на стене. 4 бутылки пива. Сними один, разнеси, 3 бутылки пива на стене.

3 бутылки пива на стене. 3 бутылки пива. Сними один, раздай 2 бутылки пива на стене.

2 бутылки пива на стене. 2 бутылки пива. Сними один, разнеси, 1 бутылка пива на стене.

1 бутылка пива на стене. 1 бутылка пива. Сними один, раздай, 0 бутылок пива на стене.

На стене просто больше нет бутылок пива.

Положите бутылку на переработку, 1 пустую бутылку в мусорное ведро.

Положите бутылку на переработку, 2 пустых бутылки в мусорное ведро.

Положите бутылку на переработку, 3 пустых бутылки в мусорное ведро.

Положите бутылку на переработку, 4 пустых бутылки в мусорное ведро.

Я хорошо понимаю первую часть, пока не дошёл до того, что «на стене просто больше нет бутылок пива. После этого я не понимаю, как переменное количество бутылок увеличивается с 1 до 4».

Ответы на вопрос(6)

Ваш ответ на вопрос