В текущей реализации функции:
Функция recursiveFunction(N) {
В текущей реализации функции:
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Функция recursiveFunction(N) { let counter = 0; if (N > 0) { counter = counter + 1; recursiveFunction(N - 1); } // console.log(counter) } recursiveFunction(3); // 3 3 3 ?
Объясните, каким будет вывод функции и почему. Также укажите любые проблемы текущей реализации рекурсивной функции и предложите, как их исправить, чтобы правильно считать и выводить количество рекурсивных вызовов.
Ответ
В текущей реализации функции:
function recursiveFunction(N) {
let counter = 0;
if (N > 0) {
counter = counter + 1;
recursiveFunction(N - 1);
}
// console.log(counter)
}
recursiveFunction(3);
переменная counter инициализируется заново при каждом вызове функции, поэтому она не накапливает значение между вызовами. В итоге, даже если раскомментировать console.log(counter), на каждом уровне рекурсии будет выводиться 1 или 0, а не общее количество вызовов.
Также, функция ничего не возвращает и не выводит итоговое значение.
Чтобы корректно считать количество вызовов рекурсии, можно сделать так:
function recursiveFunction(N) {
if (N <= 0) return 0;
return 1 + recursiveFunction(N - 1);
}
const count = recursiveFunction(3);
console.log(count); // 3
Здесь функция возвращает количество вызовов, суммируя 1 за текущий вызов и результат рекурсивного вызова. В итоге выводится общее количество вызовов — 3.