Recursion makes the program more readable, but it gives poor performance. Iterative procedures give good performance, but are not as readable and may require a local variable to retain an intermediate value (variability). Using tail recursion, you get the best of both worlds, and no "sum" variable is needed (immutability). This is very useful when calculating large sums or factorials, because you will never get a stackoverflow exception, because you simply forward the result to the next call to the recursive function.
In a parallel environment, immutability is very important. Try editing the code and passing very large numbers to functions to see the difference.
Further reading here
source share