Что ж, каждый раз, когда вы достигли цели, вы уменьшаете значение n
на единицу. Вызовы функций будут опускаться до самого дна, прежде чем что-либо будет напечатано, затем будет вызван один из самых нижних параметров printfs и так далее. Возможно, вы захотите визуализировать нисходящие вызовы следующим образом:
fun(5): * P
fun(4): * P
fun(3): * P * P
fun(2): * P P * P * P P
fun(1): *P *P *P *P *P
time -->->->
, где P представляет печать и * новый вызов (вполне может быть, там есть некоторые опечатки). Если вы не делали уменьшение во второй раз, вы получаете W-образный граф вызовов, так как он продолжает идти вниз и вверх снова и вниз, но второй набор вызовов каждой функции находится на «конусе» ниже, поэтому выглядит раздавленным справа. Стек никогда не бывает глубиной более 5 (скажем, если первый вызов был забавным (5)).
Не знаю, поможет ли эта визуализация, но я приложил все усилия с ASCII.