CS 051 Fall 2011

Lecture 18

Recursion Review

We follow four basic steps when we think about recursion:
  1. Define an interface with all of the methods that both base case and recursive case
    classes must implement.
  2. Define one or more classes representing base cases. Make sure that all methods from
    the interface are implemented. Convince yourself that the constructors and methods work correctly.
  3. Define the constructors for recursive classes. Recursive calls of the constructor
    should only create objects that are simpler than the one being built by the constructor.
    Similarly, instance variables whose types are either the interface or class should only
    refer to objects simpler than the one being constructed. In particular, the construction
    of simpler objects in the constructor body should eventually end up at a base case.
    Convince yourself that the constructor will be correct under the assumption that the
    construction of simpler objects is correct.
  4. Write each method under the assumption that it works correctly on all simpler objects.
    Convince yourself that the methods will be correct under the assumption that instance
    variables hold simpler objects.

More Recursion

We looked at another recursion example where we had more than one recursively defined object
in our recursive case. In the broccoli example, a broccoli part consisted of a stem, and three
smaller broccoli parts. We handle them in the obvious way, and make sure to account for all
of them when defining our contains and move methods.

The class example Broccoli

Next, we added some animation to our broccoli example. Instead of recursively calling
the constructor from the constructor, we called from the run method after
and appropriate pause. This slowed down the process of drawing the broccoli so that
we could see the recursion in process.

The class example LivingBroccoli

Then we combined the ideas of recursion and animation to create our ChainReaction program.

This program recursively defined a list data structure as the first item on the list,
and the rest of the list. We used two while loops in the run method. The outer
loop selected the next ball off the list, and the inner loop animated the selected ball.

Finally, we looked at the Powers program.

Here, we used a recursive definition to raise a base to a power.