Tail calls aren't just for loops. Tail calls can be across functions.
A calls B calls C calls A calls B ... repeat until ... one of the functions solves the problem and does a return. Then the stack is unwound. But with TCO all of the tail calls simply re-use the current stack frame and JUMP to the next function.
Yes, but you have to be explicit that it's a recur by using the recur special form. (I'm not convinced that matters, but some people get hung up on it.)
yeah, there is special syntax for it in other jvm languages that support tail recursion, as well (kotlin).
i honestly don't know how they would do it otherwise, really. I actually liked the `recur` syntax of clojure when i was playing around with it a few years ago, though.
other languages supporting tail recursion on the jvm do that. I don't know enough about clojure to say that is how they do it, though.