При рекурсивных вызовах функций в стек вызовов записывается вся информация, связанная с этим вызовом. 4 Например, параметры функции и её локальные переменные, адрес возврата в точку вызова. 4
В момент, когда функция вызывает сама себя, действие «материнской» функции приостанавливается — и начинается выполнение «дочерней». 2 Так как рано или поздно программа должна вернуться к «материнской» функции, нужно сохранить данные о её работе. 2 Для этого и используется стек вызовов. 2
При каждом новом вызове функции на вершине стека оказывается новый блок. 2 Он начинает работать, остальные же в это время ничего не делают и просто хранят данные. 2 Так происходит, пока рекурсия не доходит до базового случая. 2
У стека всегда есть максимально допустимый размер. 2 Если максимум достигнут, а в стек пытаются положить ещё одну функцию, происходит ошибка «Переполнение стека». 2