Entendiendo la recursión en el ejemplo de la botella de cerveza.

Estoy practicando la recursión en C por mi cuenta y encontré este ejemplo en línea. Sin embargo hay una cosa que no entiendo.

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

Entonces uso un método principal como tal:

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

Y la salida es como tal:

4 botellas de cerveza en la pared. 4 botellas de cerveza. Toma uno, pásalo, 3 botellas de cerveza en la pared.

3 botellas de cerveza en la pared. 3 botellas de cerveza. Toma uno, pásalo, 2 botellas de cerveza en la pared.

2 botellas de cerveza en la pared. 2 botellas de cerveza. Toma uno, pásalo, 1 botellas de cerveza en la pared.

1 botellas de cerveza en la pared. 1 botellas de cerveza. Toma uno, pásalo, 0 botellas de cerveza en la pared.

Simplemente no hay más botellas de cerveza en la pared.

Ponga una botella en el reciclaje, 1 botellas vacías en el contenedor.

Ponga una botella en el reciclaje, 2 botellas vacías en el contenedor.

Ponga una botella en el reciclaje, 3 botellas vacías en el contenedor.

Ponga una botella en el reciclaje, 4 botellas vacías en el contenedor.

Entiendo muy bien la primera parte hasta que llego a "Simplemente no hay más botellas de cerveza en la pared. No entiendo después cómo se incrementa el número variable de botellas de 1 a 4".

Respuestas a la pregunta(6)

Su respuesta a la pregunta