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

Ответ

Бесконечная рекурсия без условия выхода приведет к переполнению стека вызовов (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)  # Рекурсивный случай

Ответ 18+ 🔞

А, ну это классика, ёпта! Слушай, тут про рекурсию без тормозов. Представь, ты зовёшь себя по имени, а тот, кого позвал, тоже себя зовёт, и так до бесконечности. В итоге получается такая толпа твоих клонов в прихожей, что дверь вышибает и вся конструкция, блядь, накрывается медным тазом. Это и есть переполнение стека, ядрёна вошь.

Что там внутри творится, по полочкам:

  1. Каждый раз, когда функция сама себя дёргает, система кладёт на стопку (в стек) новую запись: "Так, Вася тут был, теперь он внутри себя опять Васю запускает".
  2. Проблема в том, что эта стопка не резиновая. Обычно ей дают 1-8 МБ, и всё.
  3. Когда места больше нет — пиzдец. Программа просто падает с ошибкой, типа "всё, чувак, я больше не могу".

Вот, смотри, как это выглядит на Python:

def infinite_recursion():
    infinite_recursion()  # Это как кричать в ущелье — эхо возвращается бесконечно

# Вызовет: RecursionError: maximum recursion depth exceeded (Нашёлся умник, который попытался)
infinite_recursion()

Выполнишь этот код — и получишь удивление пиздец. Компьютер тебе вежливо так: "Ну нет, браток, доверия ебать ноль к твоей логике".

Как не облажаться? Правила простые:

  • Обязательно делай условие выхода (базовый случай). Это как стоп-кран в поезде, который летит под откос.
  • Убедись, что с каждым шагом ты к этому условию приближаешься, а не удаляешься.
  • Если нужно копать овердохуища глубоко, лучше перепиши на циклы или используй хвостовую рекурсию (если твой язык это жуёт).

Вот пример, как надо, чтобы не было стыдно:

def factorial(n):
    if n <= 1:          # Базовый случай! Сказал "стоп" — значит стоп.
        return 1
    return n * factorial(n - 1)  # А вот тут уже рекурсивно, но с уменьшением. Всё чинно.

Вот так и живём: без базового случая — хуй с горы, а с ним — красота и работающая программа.