Entendendo a recursão no exemplo da garrafa de cerveja
Eu estou praticando recursão em C por conta própria e encontrei este exemplo online. No entanto, há uma coisa que não entendo.
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);
}
}
Então eu uso um método principal como tal:
int main(int argc, const char * argv[])
{
singSongFor(4);
return 0;
}
E a saída é assim:
4 garrafas de cerveja na parede. 4 garrafas de cerveja. Tome um para baixo, passe-o ao redor, 3 garrafas de cerveja na parede.
3 garrafas de cerveja na parede. 3 garrafas de cerveja. Pegue um para baixo, passe-o, duas garrafas de cerveja na parede.
2 garrafas de cerveja na parede. 2 garrafas de cerveja. Pegue um para baixo, passe-o, 1 garrafa de cerveja na parede.
1 garrafas de cerveja na parede. 1 garrafas de cerveja. Pegue um para baixo, passe-o, 0 garrafas de cerveja na parede.
Simplesmente não há mais garrafas de cerveja na parede.
Coloque uma garrafa na reciclagem, 1 garrafas vazias no lixo.
Coloque uma garrafa na reciclagem, 2 garrafas vazias no lixo.
Coloque uma garrafa na reciclagem, 3 garrafas vazias no lixo.
Coloque uma garrafa na reciclagem, 4 garrafas vazias no lixo.
Eu entendo a primeira parte muito bem até chegar a "Simplesmente não há mais garrafas de cerveja na parede. Eu não entendo depois como o número variável de garrafas é incrementado de 1 até 4.