Насколько я знаю, компьютеры использовали стек вызовов с самых ранних дней.
Штабы были впервые предложены Аланом Тьюрингом, начиная с 1946 года. Я считаю, что стеки сначала использовались в качестве теоретической концепции для определения pushdown automatons.
Первая статья о стеке вызовов, которую я мог найти, была написана Дейкстра в журнале Numerische Mathematik под названием «Рекурсивное программирование» (http://link.springer.com/article/10.1007%2FBF01386232).
Также обратите внимание, что стек вызовов существует в основном из-за рекурсии. Возможно, будет сложно узнать, кто действительно получил идею для стека вызовов, в первую очередь, поскольку довольно интуитивно понятно, что стек необходим, если вы хотите поддерживать рекурсию. Рассмотрим эту цитату из «Программирования программирования программистов» - Deep C Secrets, Peter Van Der Linden:
Стек не нужен, кроме рекурсивных вызовов. Если не для , то фиксированное количество мест для локальных переменных, параметров и обратных адресов будет известно во время компиляции и может быть выделено в BSS. [...] Разрешение рекурсивных вызовов означает, что мы должны найти способ, позволяющий одновременно создавать несколько экземпляров локальных переменных , хотя будет доступен только последний из них - классическая спецификация стека.
Это из главы 6, стр. 143/144 - если вам нравятся подобные вещи, я настоятельно рекомендую вам прочитать его.
Легко понять, что стек, вероятно, является подходящей структурой для использования, когда требуется отслеживать цепочку вызовов, поскольку вызовы функций на удержании возвращаются в режиме LIFO.