Thursday, December 27, 2012

Recursion is one of the tough programming technique to master. Many
programmers working on both Java and other programming language like C or C++
struggles to think recursively and figure out recursive pattern in problem
statement, which makes it is one of the favorite topic of any programming
interview. If you are new in Java or just started learning Java programming
language and you are looking for some exercise to learn concept of recursion
than this tutorial is for you. In this programming tutorial we will see couple
of example of recursion in Java programs and some programming exercise which
will help you to write recursive code in Java e.g. calculating
Factorial, reversing
String and printing Fibonacci series using recursion technique. For those who are not familiar
with recursion programming technique here is the short introduction: "Recursion
is a programming technique on which a method call itself to calculate
result". Its not as simple as it look and mainly depends upon your ability
to think recursively. One of the common trait of recursive problem is that they
repeat itself, if you can break a big problem into small junk of repetitive
steps then you are on your way to solve it using recursion.

How to solve problem using Recursion in Java

In order to solve a problem using recursion in Java or any other
programming language e.g. C or C++, You must be able to figure out :

1) Base case, last point which can be resolve without calling recursive
function e.g. in case of Fibonacci series its

1 and 2 where result will be 1. In case of recursive power function its
zero power which is equal to 1 or in case of calculating Factorial its
factorial of zero which is equal to 1.

2) With every recursive method call, Your problem must reduce and
approach to base case. If this is not the case than you won't be able to
calculate result and eventually die with java.lang.StackOverFlowError

If you look above example of recursion in Java you will find that we have
a base case where program returns result before calling recursive function and
than with every invocation number is decreased by 1. This is very important to
reach solution using recursive technique.

Programming
Exercise to solve using Recursion

Here are few more programming exercise to learn Recursion programming
technique in Java programming language. This exercise are solely for practicing.
In order to understand Recursion properly you must try to think recursive e.g.
look tree as collection of small tree, look string as collecting of small
String, look staircases as collection of small staircase etc. Any way try to
solve following programming exercise by using Recursion programming technique for
better understanding

1. Print Fibonacci series in Java for a given number, see here
for solution

2. Calculate factorial of a give number in Java,see here
for solution of this programming exercise

This was simple introduction of Recursion programming technique to Java
programmer with most basic examples. There are lot more to learn on Recursion
including different types of recursion e.g. tail recursion, improving
performance of recursive algorithm using memoization or caching pre
calculated result etc. Its also recommended not to use recursive method in
production code instead write iterative code to avoid any stackoverflow error.

I like list of programming question on Recursion, that's the best way to learn recursion in Java or any other programming language. Here are few more recursive programming exercise to add into your list :

In order to understand Recursion better or use Recursion in your code, you should know how to combine result from individual method calls to generate complete result. E.g. In this recursive Fibonacci method you are adding return value of methods. Some time you may need to multiply it e.g. in case of calculating factorial using recursion, you do n*factorial(n-1)

Recursion is not good for production code, it takes more memory and space and be careful of creating arrays in recursive code. The amount of space used can pile up very quickly, as can the amount of time required for memory management.

Recursion has its shares of problem e.g. difficult to understand, read and constant worry of stackoverflow error, but it doesn't mean its completely useless. Recursion is very intuitive in many cases e.g. trees, graphs and other recursive data structures, for example path finding algorithms rely on recursion. The problem of stackoverflow error can also be solved by tail call optimization and many JVM language like Scala already does that. By the way, Java is shy way from recursion, even in TreeMap implementation in Java uses non-recursive approach to navigat trees. In short, recursion is bad in many cases but it is also a natural problem solver in other, just like static methods, recursion also has its place in your code base.