# CSC 205 Programming II Lecture 10 Towers of Hanoi.

## Presentation on theme: "CSC 205 Programming II Lecture 10 Towers of Hanoi."— Presentation transcript:

CSC 205 Programming II Lecture 10 Towers of Hanoi

Towers of Hanoi – the problem A number of disks, which are of different sizes and have a hole in the middle Three poles: A: the source B: the destination C: the spare A disk can be placed only on top of disks larger than itself How to move the disks from the source pole to the destination? ABC

Towers of Hanoi – the strategy The problem can be solved recursively The base case: if there is only one disk, move it from the source pole to destination Recursive solution Ignore the bottom disk and move the upper n-1 disks to the spare pole C Move the bottom disk to B, the real destination Move the upper n-1 disks from C to B, using the same strategy

The Strategy at Work ABCABC ABCABC The initial state Done! Move the upper n-1 disks Move the bottom disk

The Solution – an overview Divide a complicated problem into three smaller ones One of the three can be solved immediately Sizes of the other two may still need further diminishing Four arguments are needed to maintain the local environment Current size of the problem The source, destination, and spare

The Solution – a Java expression The problem statement Solve towers(n, 'A', 'B', 'C') The solution Move the upper n-1 disks to the spare pole towers(n-1, 'A', 'C', 'B') Move the bottom disk to destination towers(1, 'A', 'B', 'C') Move the upper n-1 disks back to destination towers(n-1, 'C', 'B', 'A')

The Solution – the sample code void solveTower(int count, char source, char destination, char spare) { if (count == 1) { //move a disk directly from source to destination System.out.println(Move top disk from pole + source + to pole + destination); } else { solveTower(count-1, source, spare, destination); solveTower(1, source, destination, spare); solveTower(count-1, spare, destination, source); }

Box Trace – towers of Hanoi

Is It TOP or BOTTOM? Class exercise Modify the source code given in your text (on slide 7) to display the disk moved each time

Efficiency Two factors contributing to inefficiency The overhead associated with method calls The inherent inefficiency of some recursive algorithms (such as the one for the Fibonacci sequence) Tail recursion Only one recursive call It is the last action in the recursive method Not as efficient as its iterative counterpart, and can easily be converted to iterative

Class Exercise – From Recursion to Iterative What does the following method do? Convert the following recursive method to its equivalent iterative counterpart void displayOctal(int n) { if (n > 0) { if (n/8 > 0) displayOctal(n/8); System.out.print(n%8); } else System.out.println(); }