This is a two part series on Recursion, please complete part-1 before you proceed further.
Why do we need a Tail-Recursive functions?
Simple recursion creates a series of stack frames, and for algorithms that require
deep levels of recursion, this creates a StackOverflowError.
How to Overcome this?