Java Reference
In-Depth Information
16 /** The method for finding the solution to move n disks
17 from fromTower to toTower with auxTower */
18 public static void
19 {
20 if (n == 1 ) // Stopping condition
21 System.out.println( "Move disk " + n + " from " +
22 fromTower + " to " + toTower);
23 else {
24 ;
25 System.out.println( "Move disk " + n + " from " +
26 fromTower + " to " + toTower);
27
moveDisks( int n, char fromTower,
char toTower, char auxTower)
base case
moveDisks(n - 1 , fromTower, auxTower, toTower)
recursion
moveDisks(n - 1 , auxTower, toTower, fromTower)
;
recursion
28 }
29 }
30 }
Enter number of disks:
The moves are:
Move disk 1 from A to C
Move disk 2 from A to B
Move disk 1 from C to B
Move disk 3 from A to C
Move disk 1 from B to A
Move disk 2 from B to C
Move disk 1 from A to C
Move disk 4 from A to B
Move disk 1 from C to B
Move disk 2 from C to A
Move disk 1 from B to A
Move disk 3 from C to B
Move disk 1 from A to C
Move disk 2 from A to B
Move disk 1 from C to B
4
This problem is inherently recursive. Using recursion makes it possible to find a natural, sim-
ple solution. It would be difficult to solve the problem without using recursion.
Consider tracing the program for n = 3 . The successive recursive calls are shown in
Figure 20.8. As you can see, writing the program is easier than tracing the recursive calls. The
moveDisks(3,'A','B','C')
moveDisks(2,'A','C','B')
move disk 3 from A to B
moveDisks(2,'C','B','A')
moveDisks(2,'A','C','B')
moveDisks(2,'C','B','A')
moveDisks(1,'A','B','C')
move disk 2 from A to C
moveDisks(1,'B','C','A')
moveDisks(1,'C','A','B')
move disk 2 from C to B
moveDisks(1,'A','B','C')
moveDisks(1,'A','B','C')
move disk 1 from A to B
moveDisks(1,'B','C','A')
move disk 1 from B to C
moveDisks(1,'C','A','B')
move disk 1 from C to A
moveDisks(1,'A','B','C')
move disk 1 from A to B
F IGURE 20.8
Invoking moveDisks(3, 'A', 'B', 'C') spawns calls to moveDisks recursively.
 
Search WWH ::




Custom Search