Chapter 6 Recursion Example
Chapter 6 Recursion Example
Recursion
(Additional Example)
2022-2023
COMP1117A Computer Programming
Dr. T.W. Chim ([email protected]) & Dr. H.F. Ting ([email protected])
Department of Computer Science, The University of Hong Kong
Example 6. Tower of Hanoi
n=4
A B C
The Tower of Hanoi is a mathematical game.
It consists of three rods (A,B,C) and n disks of different sizes which can slide
onto any rod.
Constraint: At any stage, no larger disk can be placed on top of smaller disk.
The objective of the puzzle is to move the entire stack from rod A to rod C.
Only one disk is allowed to move at a time. 2
Example 6. Tower of Hanoi
n=1
A B C
3
Example 6. Tower of Hanoi
n=2
A B C
4
Example 6. Tower of Hanoi
n=2
A B C
5
Example 6. Tower of Hanoi
n=2
A B C
6
Example 6. Tower of Hanoi
n=2
A B C
7
Example 6. Tower of Hanoi
n=3
A B C
A B C
9
Example 6. Tower of Hanoi
Problem
for n = 2
n=2
A B C
10
Example 6. Tower of Hanoi
Problem
for n = 2
n=2
A B C
11
Example 6. Tower of Hanoi
Problem
n=3 for n = 3
A B C
12
Example 6. Tower of Hanoi
Problem
n=3 for n = 3
A B C
13
Example 6. Tower of Hanoi
Problem
n=3 for n = 3
A B C
14
Example 6. Tower of Hanoi
def move(n, start, end, buffer):
if n == 1: # Base case
print("Moving disk from",start,"to",end)
else: # Progress
move(n-1,from, buffer, to)
move(1,from, to, buffer)
moveTower(n-1, buffer, to, from)
Base case:
Just move the disk from
the fromPole to the toPole
when height==1.
15
Example 6. Tower of Hanoi
def move(n, start, end, buffer):
if n == 1: # Base case
print("Moving disk from",start,"to",end)
else: # Progress
move(n-1, start, buffer, end)
move(1, start, end, buffer)
move(n-1, buffer, end, start)
Progress:
Make a n-1 problem to move the tower from start to buffer.
Make a 1 problem to move the tower from start to end.
Make a n-1 problem to move the tower from buffer to end.
16
Example 6. Tower of Hanoi
def move(n, start, end, buffer):
if n == 1: # Base case
print("Moving disk from",start,"to",end)
else: # Progress
move(n-1, start, buffer, end)
move(1, start, end, buffer)
move(n-1, buffer, end, start)
move(2,"A","B","C")
move(3,"A","C","B")
18
Example 6. Tower of Hanoi
def move(n, start, end, buffer):
if n == 1: # Base case move(1,"A","C","B")
print("Moving disk from",start,"to",end)
else: # Progress
move(n-1, start, buffer, end) move(1,"A","B","C")
move(1, start, end, buffer)
move(n-1, buffer, end, start)
move(1,"C","B","A")
move(2,"A","B","C")
move(3,"A","C","B")
19
Example 6. Tower of Hanoi
def move(n, start, end, buffer):
if n == 1: # Base case move(1,"A","C","B")
print("Moving disk from",start,"to",end)
else: # Progress
move(n-1, start, buffer, end) move(1,"A","B","C")
move(1, start, end, buffer)
move(n-1, buffer, end, start)
move(1,"C","B","A")
move(2,"A","B","C")
move(1,"A","C","B")
move(3,"A","C","B")
20
Example 6. Tower of Hanoi
def move(n, start, end, buffer):
if n == 1: # Base case move(1,"A","C","B")
print("Moving disk from",start,"to",end)
else: # Progress
move(n-1, start, buffer, end) move(1,"A","B","C")
move(1, start, end, buffer)
move(n-1, buffer, end, start)
move(1,"C","B","A")
move(2,"A","B","C")
move(1,"A","C","B")
move(3,"A","C","B")
move(2,"B","C","A")
21
Example 6. Tower of Hanoi
def move(n, start, end, buffer):
if n == 1: # Base case move(1,"A","C","B")
print("Moving disk from",start,"to",end)
else: # Progress
move(n-1, start, buffer, end) move(1,"A","B","C")
move(1, start, end, buffer)
move(n-1, buffer, end, start)
move(1,"C","B","A")
move(2,"A","B","C")
move(1,"B","A","C")
move(1,"A","C","B")
move(3,"A","C","B")
move(1,"B","C","A")
move(2,"B","C","A")
move(1,"A","C","B")
22
Example 6. Tower of Hanoi
1
Now, let’s try to use these 7 steps to see if move(1,"A","C","B")
you can solve the Tower of Hanoi problem 2
with n=3? move(1,"A","B","C")
Let’s try move(4,"A","C","B") as
3
well!
move(1,"C","B","A")
move(2,"A","B","C")
5
4 move(1,"B","A","C")
move(1,"A","C","B")
move(3,"A","C","B") 6
move(1,"B","C","A")
7
move(2,"B","C","A")
move(1,"A","C","B")
23
Example 6. Tower of Hanoi
A B C
24
Chapter 6.
END
Acknowledgement:
This set of slides is partially adopted from
ENGG1330. Thanks to Dr. C.K. Chui!
2022-2023
COMP1117A Computer Programming
Dr. T.W. Chim ([email protected]) & Dr. H.F. Ting ([email protected])
Department of Computer Science, The University of Hong Kong