Я работаю над книгой, которая включает в себя главу, посвященную рекурсии в C. Он печатает 99 бутылочных песен в журнал. Вот код:Рекурсия в C confusion
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. Я не уверен, как изменилось значение 10, и поэтому как oneFewer
отслеживает количество бутылок. Еще один вопрос, является ли мое замешательство в отношении этой темы плохим признаком продолжения программирования? Я до сих пор его прибивал гвоздями.
Почему существуют дубликаты? http://stackoverflow.com/questions/13224759/99-bottle-of-beer-recursion-doesnt-seem-to-work –
Не чувствуйте себя плохо, что вы не получите его немедленно! Рекурсия может быть сложной темой, если вы просто попадаете в нее. Возможно, вы захотите попробовать http://www-cs-faculty.stanford.edu/~eroberts/courses/cs106b/chapters/05-intro-to-recursion.pdf – nullptr
Спасибо большое, но это обнадеживает! И извините Аникет, что не оказалось в моем поиске. – John