Вопрос проверяет умение работать с неизвестной глубиной вложенности и выбирать безопасный алгоритм.
Задача решается либо рекурсией, либо итеративно через стек. Рекурсия проще, но может привести к stack overflow при глубокой вложенности. Итеративный подход со своим стеком безопаснее и подходит для бесконечной или очень глубокой структуры. На практике выбор зависит от ограничений на глубину данных.
Каждый вызов занимает место в call stack
При большой глубине возникает RangeError
Глубина данных не всегда контролируема
function countItems(arr) {
let count = 0;
const stack = [...arr];
while (stack.length) {
const item = stack.pop();
if (Array.isArray(item)) {
stack.push(...item);
} else {
count++;
}
}
return count;
}
Нет риска переполнения стека вызовов
Контроль над памятью
Подходит для “бесконечной” глубины
Глубина ограничена
Код должен быть максимально читаемым
Нет строгих требований к отказоустойчивости
Для неизвестной или потенциально бесконечной вложенности лучше использовать итеративный подход со стеком, а рекурсию — только при гарантированной глубине.
Frontend developer
Ментор по Frontend
Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства
Записаться на консультацию