Назад к вопросамКакая строка, добавленная в начало
JuniorДебаггингЧасто
Какая строка, добавленная в начало factorial, заставит вызов factorial(3) вернуть 6?
int factorial(int n) {
return n * factorial(n - 1);
}if (n == 0) { return 1; }
- Ждать, что подойдёт
return 0;: тогдаfactorial(3)вычислит 3 · 2 · 1 · 0 = 0, поэтому базовый случай произведения возвращает1. - Ждать, что вызовы закончатся сами: без базового случая каждый вызов делает ещё один, и ни один вызов не возвращает результат.
- Что сделает исправленная
factorial, если вызвать её с отрицательнымn? - Как записать
factorialциклом вместо рекурсии?
Исправление
Базовый случай останавливает рекурсию: при n == 0 функция возвращает 1 и больше себя не вызывает. Значение 1 не меняет произведение, поэтому factorial(3) вычисляет 3 · 2 · 1 · 1 и возвращает 6.
int factorial(int n) {
if (n == 0) {
return 1;
}
return n * factorial(n - 1);
}