私は、C での再帰を扱う章を含む本を読んでいます。それは 99 ボトルの歌をログに出力します。コードは次のとおりです。
void singTheSong (int numberOfBottles) {
if (numberOfBottles == 0) {
printf("There are no more bottles left.\n");
} else {
printf("%d bottles of bear 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", oneFewer);
singTheSong(oneFewer);
}
}
int main(int argc, const char * argv[])
{
singTheSong(99);
return 0;
}
出力は、歌がどのように歌われるかのように読み取れます。私が理解に苦しんでいるのは、numberOfBottles
変数がその値をどのように変更するかということです。変数で1 が減算されることがoneFewer
わかりますが、これがどのように機能しているかを正確に理解できていません。ログには、「壁に 99 本のクマ、99 本のビール。1 本を降ろして回し、壁に 98 本のビール」と書かれているように思えます。numberOfBottles
値がどのように変化するのか、したがってoneFewer
ボトルの数をどのように追跡するのかはわかりません。もう 1 つ質問があります。このトピックに関する私の混乱は、プログラミングを続けるのに悪い兆候ですか? ここまで釘付けでした。