Функция постоянно вызывает себя без условия остановки. Обычно это заканчивается переполнением стека, но рассчитывать на конкретную ошибку или бесконечную корректную работу нельзя.
Неограниченный рекурсивный вызов функции
Функция постоянно вызывает себя без условия остановки. Обычно это заканчивается переполнением стека, но рассчитывать на конкретную ошибку или бесконечную корректную работу нельзя.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Что произойдёт, если запустить следующий фрагмент кода?
int count = 0;
void endlessRecursion(int n)
{
count++;
std::cout << n << " " << count << std::endl;
endlessRecursion(n);
}
Опишите поведение программы и возможные последствия её выполнения.
Ответ
Функция постоянно вызывает себя без условия остановки. Обычно это заканчивается переполнением стека, но рассчитывать на конкретную ошибку или бесконечную корректную работу нельзя.
При каждом входе count увеличивается, печатаются неизменный n и новый счётчик; std::endl дополнительно сбрасывает буфер вывода. Вызов рекурсивный и хвостовой, но C++ не гарантирует его оптимизацию в цикл.
Без оптимизации обычно раньше исчерпается стек. Если реализация устранит рост стека, остаётся переполнение знакового int в count++, которое даёт неопределённое поведение. Чтобы код был корректным, нужны условие завершения и безопасный диапазон счётчика; для повторения с заданным числом шагов проще цикл.