UMBC CMSC 201 Fall '05
CSEE | 201 | 201 F'05 | lectures | news | help

Towers of Hanoi

There is a backstory involving Zen monks and 64 golden disks, but it's invented.

A Recursive algorithm

Here's a simple recursive algorithm for the TOH

Preliminaries

To move n discs from peg A to peg B:

  1. move n-1 discs from A to C.
  2. move the remaining disc from A to B.
  3. move n-1 discs from C to B.

Animation

Here's a simple animation for the n=3 case.

A C program

Here is a simple C program that implements the recursive algorithm. It's output is a series of instructions on what to move and where to move it.

/***************************************************
 * File: toh.c
 * Author: Tim Finin
 * Date: 4/12/2005
 * Modified by: Sue Evans
 * Date: 11/5/05
 *
 * A recursive solution for the Towers Of Hanoi problem
 * that uses command line arguments
 *
 * Usage: toh <positive integer>
 *        where the integer is the number of disks
 ************************************************************/
 
 
#include <stdio.h> 
#include <stdlib.h>

void TowersOfHanoi(int n, char from, char to, char spare);

int main (int argc, char **argv) {

   int n;

   if (argc != 2) {
      printf("Usage: toh <positive integer>\n");
      exit(-1);
   }

   n = atoi(argv[1]);
   printf("Moving %d discs from peg %c to peg %c:\n", n, 'A', 'B');
   TowersOfHanoi(n, 'A', 'B', 'C');

   return 0;
}

void TowersOfHanoi (int n, char from, char to, char spare) {

   if (n < 1) {
      return;
   }
   TowersOfHanoi(n-1, from, spare, to);
   printf("  move a disc from peg %c to peg %c\n", from, to);
   TowersOfHanoi(n-1, spare, to, from);
}

Sample output

Shows naming the executable toh (something other than a.out) And the sample output for various values of n...
  
% gcc -o toh -Wall -ansi toh.c
% toh 3
Moving 3 discs from peg A to peg B:
  move a disc from peg A to peg B
  move a disc from peg A to peg C
  move a disc from peg B to peg C
  move a disc from peg A to peg B
  move a disc from peg C to peg A
  move a disc from peg C to peg B
  move a disc from peg A to peg B
% toh 4
Moving 4 discs from peg A to peg B:
  move a disc from peg A to peg C
  move a disc from peg A to peg B
  move a disc from peg C to peg B
  move a disc from peg A to peg C
  move a disc from peg B to peg A
  move a disc from peg B to peg C
  move a disc from peg A to peg C
  move a disc from peg A to peg B
  move a disc from peg C to peg B
  move a disc from peg C to peg A
  move a disc from peg B to peg A
  move a disc from peg C to peg B
  move a disc from peg A to peg C
  move a disc from peg A to peg B
  move a disc from peg C to peg B
% toh 5
Moving 5 discs from peg A to peg B:
  move a disc from peg A to peg B
  move a disc from peg A to peg C
  move a disc from peg B to peg C
  move a disc from peg A to peg B
  move a disc from peg C to peg A
  move a disc from peg C to peg B
  move a disc from peg A to peg B
  move a disc from peg A to peg C
  move a disc from peg B to peg C
  move a disc from peg B to peg A
  move a disc from peg C to peg A
  move a disc from peg B to peg C
  move a disc from peg A to peg B
  move a disc from peg A to peg C
  move a disc from peg B to peg C
  move a disc from peg A to peg B
  move a disc from peg C to peg A
  move a disc from peg C to peg B
  move a disc from peg A to peg B
  move a disc from peg C to peg A
  move a disc from peg B to peg C
  move a disc from peg B to peg A
  move a disc from peg C to peg A
  move a disc from peg C to peg B
  move a disc from peg A to peg B
  move a disc from peg A to peg C
  move a disc from peg B to peg C
  move a disc from peg A to peg B
  move a disc from peg C to peg A
  move a disc from peg C to peg B
  move a disc from peg A to peg B
%

So what?


CSEE | 201 | 201 F'05 | lectures | news | help

Last Modified - Tuesday, 08-Nov-2005 10:02:20 EST