У меня есть следующий код:
#include <stdio.h>
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[]) {
// We could sing 99 verses, but 4 is easier to think about
SingSongFor(4);
return 0;
}
По моему пониманию, программа должна завершиться после печати:
На стене просто нет бутылок пива.
Но как оно возобновляется для печати:
Поместите бутылку в рециркуляцию, 1 пустую бутылку в мусорное ведро.
Поместите бутылку в рециркуляцию, 2 пустые бутылки в мусорное ведро.
Поместите бутылку в рециркуляцию, 3 пустые бутылки в бункере.
Поместите бутылку в рециркуляцию, 4 пустые бутылки в бункере.
Функции if уже распечатывают сообщение, но вместо того, чтобы завершать его, он также переходит к другому. Как это возможно? И как есть приращение от 1 до 4 в "numberOfBottles"?
Обновление: Это мое понимание кода. Пожалуйста, поправьте меня, если я ошибаюсь.