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.
[1] - https://en.wikipedia.org/wiki/Tail_call#Through_trampolining
[1] - https://en.wikipedia.org/wiki/Tail_call#Through_trampolining
http://blog.moertel.com/posts/2013-06-12-recursion-to-iterat...