Можно ли создать бесконечную рекурсию, где функция вызывает саму себя без условия выхода?

«Можно ли создать бесконечную рекурсию, где функция вызывает саму себя без условия выхода?» — вопрос из категории Алгоритмы и структуры данных, который задают на 24% собеседований PHP Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Да, формально такой код написать можно, но его выполнение почти мгновенно завершится ошибкой переполнения стека вызовов (Stack Overflow).

Пример проблемного кода:

function infiniteRecursion() {
    infiniteRecursion(); // Каждый вызов добавляет новый фрейм в стек
}
infiniteRecursion();

Что происходит:

  1. Каждый вызов функции помещает в стек вызовов информацию о локальных переменных, аргументах и точке возврата.
  2. При бесконечной рекурсии этот стек исчерпывает выделенную ему память.
  3. Интерпретатор PHP аварийно завершает скрипт.

Ограничения в PHP:

  • При активном расширении Xdebug сработает ограничение xdebug.max_nesting_level (по умолчанию 256).
  • Без Xdebug скрипт упадет при достижении лимита стека, установленного самим PHP или операционной системой.

Правильная альтернатива: Для задач, требующих повторения, следует использовать итеративные циклы.

// Вместо рекурсии — цикл
while (true) {
    // ... логика ...
    if ($exitCondition) {
        break; // Контролируемый выход
    }
}

Рекурсию стоит применять только для задач, которые по своей природе рекурсивны (обход деревьев, факториал), и всегда предусматривать базовый случай (base case) для остановки.