There is one callstack (unless we deal with threads). It goes from main
to whatever the currently last call is. Each call to any function will form a "stackframe" on the stack, which contains the argument(s) to the function, the return address where it goes back to on return and any local variables inside the function.
As mentioned in some answers, there are cases where the compiler will eliminate the recursion as part of it's optimization.