A transform or heuristic must be developed so that naive recursion can be trivially unrolled into a loop (or state machine in cases of trees and graphs). Tail recursion is simply too tricky to reason through for complex logic unless you enjoy doing induction proofs.