If you’ve gone through the tutorial on recursion\, then you’re ready to see another problem where recursing multiple times really helps. It’s called the Towers of Hanoi. You are given a set of three pegs and n disks, with each disk a different size. Let’s name the pegs A, B, and C, and let’s number the disks from 1, the smallest disk, to n, the largest disk. At the outset, all n disks are on peg A, in order of decreasing size from bottom to top, so that disk n is on the bottom and disk 1 is on the top. Here’s what the Towers of Hanoi looks like for n, equals, 5 disks:
The goal is to move all n disks from peg A to peg B:
Sounds easy, right? It’s not quite so simple, because you have to obey two rules:
- You may move only one disk at a time.
- No disk may ever rest atop a smaller disk. For example, if disk 3 is on a peg, then all disks below disk 3 must have numbers greater than 3.
You might think that this problem is not terribly important. Au contraire! Legend has it that somewhere in Asia (Tibet, Vietnam, India—pick which legend on the Internet you like), monks are solving this problem with a set of 64 disks, and—so the story goes—the monks believe that once they finish moving all 64 disks from peg A to peg B according to the two rules, the world will end. If the monks are correct, should we be panicking in the streets?
First, let’s see how to solve the problem recursively. We’ll start with a really easy case: one disk, that is, n, equals, 1. The case of n, equals, 1 will be our base case. You can always move disk 1 from peg A to peg B, because you know that any disks below it must be larger. And there’s nothing special about pegs A and B. You can move disk 1 from peg B to peg C if you like, or from peg C to peg A, or from any peg to any peg. Solving the Towers of Hanoi problem with one disk is trivial, and it requires moving only the one disk one time.
How about two disks? How do you solve the problem when n, equals, 2? You can do it in three steps. Here’s what it looks like at the start:
First, move disk 1 from peg A to peg C: