I've never heard of tail recursion being used as a performance optimization. Generally it's required to prevent a recursive function from blowing the stack.
Iteration is usually more performant than recursion, but doesn't mix well with immutability.
Iteration is usually more performant than recursion, but doesn't mix well with immutability.