Summary: The Allan Technique of Programming Recursively
Students have difficulty with recursion. I once had a professor who said that recursion would become
as natural for me as iteration. Although I doubted him at the time, it has become true. Here are a few
steps I have picked up over the years.
1. Decide that the problem needs a recursive solution. Likely candidates are operations on a
recursive structure (such as trees) or problems which are defined recursively (like Ackermann's
Some people avoid recursion as it is more costly than iteration. I believe that good compilers
will eventually eliminate most of the overhead of recursive calls. Plus, the convenience and
maintainability of recursive routines make them a good choice.
2. Decide specifically what the procedure will do. What are its inputs and what are its outputs. In
a sentence, what does it accomplish?
3. Restate the problem recursively. Look for instances of the problem you defined in step 2.
If the procedure returns a value, recursive calls to the function must use the returned values and
every path through the function must return a value.
4. Write the procedure using instances of itself. Only worry about a single call of the routine. This
is similar to proof by induction. You only solve for one case, but all other cases take care of
Do not be tempted to follow the recursion. Use the routines having the faith that they will work.
(It is a self-esteem thing. Believe in yourself!) If you try to follow the recursion while you are