Zrozumienie rekursji w przykładzie butelki piwa

Sam ćwiczę rekursję w C i znalazłem ten przykład online. Jest jednak jedna rzecz, której nie rozumiem.

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

Następnie używam głównej metody jako takiej:

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

A wyjście jest takie:

4 butelki piwa na ścianie. 4 butelki piwa. Weź jedną, opuść ją, 3 butelki piwa na ścianie.

3 butelki piwa na ścianie. 3 butelki piwa. Weź jedną, opuść ją, 2 butelki piwa na ścianie.

2 butelki piwa na ścianie. 2 butelki piwa. Weź jedną, opuść ją, 1 butelkę piwa na ścianie.

1 butelka piwa na ścianie. 1 butelka piwa. Weź jedną, opuść ją, 0 butelek piwa na ścianie.

Po prostu nie ma więcej butelek piwa na ścianie.

Włóż butelkę do recyklingu, 1 puste butelki do kosza.

Włóż butelkę do recyklingu, 2 puste butelki do pojemnika.

Włóż butelkę do recyklingu, 3 puste butelki do pojemnika.

Włóż butelkę do recyklingu, 4 puste butelki do pojemnika.

Rozumiem pierwszą część bardzo dobrze, dopóki nie dojdę do „Po prostu nie ma już butelek piwa na ścianie. Nie rozumiem później, jak zmienna liczba butelek jest zwiększana od 1 do 4.

questionAnswers(6)

yourAnswerToTheQuestion