Что произойдет, если рекурсия будет выполняться бесконечно?

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

Ответ

Бесконечная рекурсия без условия выхода приведет к переполнению стека вызовов (stack overflow). В большинстве языков программирования это вызывает исключение или аварийное завершение программы.

Что происходит технически:

  1. Каждый рекурсивный вызов добавляет новый фрейм в стек вызовов
  2. Стек имеет ограниченный размер (обычно 1-8 МБ в зависимости от языка и настроек)
  3. При исчерпании стека программа аварийно завершается

Пример на Python:

def infinite_recursion():
    infinite_recursion()  # Бесконечный вызов

# Вызовет: RecursionError: maximum recursion depth exceeded
infinite_recursion()

Как избежать:

  • Всегда добавляйте базовый случай (base case)
  • Убедитесь, что рекурсия сходится к базовому случаю
  • Для глубокой рекурсии используйте итеративный подход или хвостовую рекурсию (если поддерживается)

Пример правильной рекурсии:

def factorial(n):
    if n <= 1:          # Базовый случай
        return 1
    return n * factorial(n - 1)  # Рекурсивный случай