Sobes.tech
Назад к вопросам
Middle
1

Как обойти многомерный массив с неизвестной вложенностью без рекурсии, используя стек?

Компании, где спрашивали
UserGate

Ответ от нейросети

sobes.tech AI

Чтобы обойти многомерный массив с неизвестной глубиной вложенности без рекурсии, можно использовать стек для хранения текущих элементов и их индексов. Идея в том, чтобы итерироваться по элементам, если элемент — массив, помещать его в стек для дальнейшей обработки, если элемент — значение — обрабатывать его.

Пример на JavaScript:

function flattenArray(arr) {
  const stack = [...arr]; // копируем исходный массив в стек
  const result = [];

  while (stack.length) {
    const next = stack.pop();
    if (Array.isArray(next)) {
      // если элемент массив, кладём его элементы в стек
      stack.push(...next);
    } else {
      // если элемент значение, добавляем в результат
      result.push(next);
    }
  }

  // так как мы используем стек (LIFO), порядок элементов будет обратным
  return result.reverse();
}

const nested = [1, [2, [3, 4], 5], 6];
console.log(flattenArray(nested)); // [1, 2, 3, 4, 5, 6]

Таким образом, стек позволяет обойти структуру без рекурсии, последовательно обрабатывая вложенные массивы.