A useful term when understanding tail recursion is "trampoline"[1], even though most compilers don't use this, it is a very useful way of visualising tail recursive calls.
If anybody is interested in trampolines, I just wrote an introduction to them that uses Python examples and includes a runtime visualization so you can see what's happening with the stack:
[1] - https://en.wikipedia.org/wiki/Tail_call#Through_trampolining