Мы можем видеть, что Run (n) - это функция, которая печатает неотрицательные целые числа меньше n и возвращает n . Это означает, что для Run (n) вы получите вывод 0 1 2 ... n-1
, если n положительный.
Что у вас здесь :
cout << Run(x - 1) << " ";
совпадает с
int r = Run(x - 1);
cout << r << " ";
То есть Run (x-1) будет печатать числа меньше x-1 и возврат x-1 . Поэтому, если x == 5 , это означает Выполнить (x-1) и вывести числа от 0 до x-2 и r было установлено на 4 . Затем функция напечатает r и вернется. Если вы все еще в замешательстве, это точно так же, как и:
Run(x - 1);
cout << x-1 << " ";
Поскольку мы знаем, что Run (x-1) всегда будет возвращать x-1 мы можем пропустить сохранение его в переменной и распечатать его напрямую. Хитрость при анализе рекурсивных функций состоит в том, чтобы просто предположить, что они работают - предположить , что Run (x-1) успешно печатает числа от 0 до x-2 - остается только напечатать x-1 .
Так что, как видите, переменная x никогда не получится напечатано, только цифры меньше его. Функция возвращает 5 , но просто никогда не печатает ее.
Если вы хотите, чтобы она печатала неотрицательные целые числа, меньшие или равные до x , внесите эту модификацию:
int Run(int x) {
if (x >= 0) {
cout << Run(x-1)+1 << " ";
}
return x;
}
Оператор if был изменен и теперь включает в себя 0 , который печатается сейчас. Run (x-1) печатает числа от 0 до x-1 и возвращает x-1 , добавляя 1 к результату позволяет вывести x .