Каждый раз, когда вы вызываете функцию, вы помещаете ее кадр стека в call stack
.Кадр стека состоит из параметров функции, ее локальных переменных и адреса возврата.Когда вы сначала вызываете func()
, вы передаете значение 10, а затем внутри func()
вы снова набираете func()
с 9. Вы продолжаете звонить func()
с n-1, пока не достигнете 0, после чегоВы возвращаетесь.Ваш стек вызовов будет выглядеть примерно так:
frame containing 1
frame containing 2
...
frame containing 10
Стек будет «раскручиваться», начиная сверху и опускаясь вниз.Каждая функция в стеке будет начинаться с того места, где она остановилась, что составляет cout
, поэтому каждое значение будет распечатываться при разматывании стека.
Я бы порекомендовал прочитать в стеке вызовов, чтобы узнать больше.