/** * Solves the Tower of Hanoi problem. * * @author Sean Barker */ public class Hanoi { private static int numMoves = 0; // print a move of one disk from peg "start" to peg "finish" private static void moveDisk(String start, String finish) { numMoves++; System.out.println(numMoves + ". " + start + " -> " + finish); } // move an entire tower from one peg to another peg, using a third temporary peg public static void moveTower(int numDisks, String start, String finish, String temp) { if (numDisks == 1) { // base case moveDisk(start, finish); } else { // step 1: move n - 1 disks from start to temp moveTower(numDisks - 1, start, temp, finish); // step 2: move largest disk from start to finish moveDisk(start, finish); // step 3: move n - 1 disks from temp to finish moveTower(numDisks - 1, temp, finish, start); } } public static void main(String args[]) { int numDisks = 5; // three pegs are named "A", "B", and "C" (left, middle, right) // move left tower to right peg with middle peg as temp moveTower(numDisks, "A", "C", "B"); } }