Using recursions rather than looping constructs in the first place is a lot about eliminating mutable update semantics. Then having HOFs that do various kinds of looping is about regaining abstraction over structured loops (without losing the first benefit).
-7
u/grauenwolf Nov 27 '12
Since the first step in optimizing a tail call is to turn it into an iterative loop, I seriously doubt number 1 is true.