我正在阅读一本书,其中有一章涉及 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
变量如何改变其值?我看到它在oneFewer
变量中减去了一个,但我无法理解它是如何工作的。在我看来,日志上写着“墙上有 99 瓶熊,99 瓶啤酒。拿下一个,传过来,墙上有 98 瓶啤酒。” 重复,从未低于 98。我不确定numberOfBottles
价值是如何改变的,因此如何oneFewer
跟踪瓶子的数量。还有一个问题,我对这个话题的困惑是否是继续编程的坏兆头?我已经把它钉牢了,直到这一点。