Well, every time you create prerequisites, you decrease the value of n by one. The function call will go down to the very bottom before something is printed, then one of the most recent printfs will be called, etc. You can visualize downstream calls as follows:
fun(5): * P fun(4): * P fun(3): * P * P fun(2): * PP * P * PP fun(1): *P *P *P *P *P time -->->->
where P is a printout and * a new call (maybe it could be some typos). If you did not decrement a second time, you get a W-look call schedule, as it continues to decline again and again, but the second set of calls to each function is on the βconeβ below, so it looks crushed on the right. Stack no more than 5 depths (if the first call was funny (5), say).
I don't know if this visualization helps, but I did my best with ASCII.
source share