There have been two main criticisms of recursion:
In the early days of software development, the technique was even barred in some organizations.
While a recursive version may take longer, for many problems this efficiency issue is not a significant concern given the improved processing speed on modern machines. Recursive efficiency issues lie with its typical implementation using a program stack. It is the pushing and popping of the activation record during method invocation that is expensive. This concept was detailed in Understanding the program stack.
Not all problems are suited for recursive solutions. Recursion should be used when: