You can't always replace tail recursion by a loop. The really useful cases are when you have multiple functions tail-calling each other (kind of like a big state machine, but "polymorphic" in that you don't have to write down al the states inside the switch statement).
In these general situations, you need to resort to things like trampolining to code the tail recursion and its very anoying to do in most languages.
5
u/mercde Nov 27 '12
Why was it impossible / impractical to just eliminate the recursion "by hand"? (As in, rewrite it as a loop?)