0% found this document useful (0 votes)
13 views

Chapter 6 Recursion Example

Python

Uploaded by

phfung1109
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
13 views

Chapter 6 Recursion Example

Python

Uploaded by

phfung1109
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 25

Chapter 6.

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

Base case: Can you solve


the above problem
instance n=1?

3
Example 6. Tower of Hanoi

n=2

A B C

Can you solve the


above problem
instance n=2?

4
Example 6. Tower of Hanoi

n=2

A B C

Strategy to move a tower of 2 disks:


Move the top 1 disk to B. (Problem of n=1)

5
Example 6. Tower of Hanoi

n=2

A B C

Strategy to move a tower of 2 disks:


Move the top 1 disk to B. (Problem of n=1)
Move the largest disk to C. (Problem of n=1)

6
Example 6. Tower of Hanoi

n=2

A B C

Strategy to move a tower of 2 disks:


Move the top 1 disk to B. (Problem of n=1)
Move the largest disk to C. (Problem of n=1)
Move the top 1 disk back to C. (Problem of n=1)

7
Example 6. Tower of Hanoi

n=3

A B C

(Important problem solving technique)


We know how to move a tower of 2 disks
from A to C using B as buffer.
Can we reuse the solution for n=2 to help to
solve this problem where n=3?
8
Example 6. Tower of Hanoi
Problem
for n = 2
n=2

A B C

Strategy to move a tower of 3 disks:


Step1. Move the top 2 disks from A to B, using C as buffer. (Problem of n=2)

9
Example 6. Tower of Hanoi
Problem
for n = 2
n=2

A B C

Strategy to move a tower of 3 disks:


Step1. Move the top 2 disks from A to B, using C as buffer. (Problem of n=2)
Step2. Move the largest disk from A to C. (Problem of n=1)

10
Example 6. Tower of Hanoi
Problem
for n = 2
n=2

A B C

Strategy to move a tower of 3 disks:


Step1. Move the top 2 disks from A to B, using C as buffer. (Problem of n=2)
Step2. Move the largest disk from A to C. (Problem of n=1)
Step3. Move the top 2 disks from B to C, using A as buffer. (Problem of n=2)

11
Example 6. Tower of Hanoi
Problem
n=3 for n = 3

A B C

Strategy to move a tower of 4 disks:


Step1. Move the top 3 disks from A to B, using C as buffer. (Problem of n=3)

12
Example 6. Tower of Hanoi
Problem
n=3 for n = 3

A B C

Strategy to move a tower of 4 disks:


Step1. Move the top 3 disks from A to B, using C as buffer. (Problem of n=3)
Step2. Move the largest disk from A to C. (Problem of n=1)

13
Example 6. Tower of Hanoi
Problem
n=3 for n = 3

A B C

Strategy to move a tower of 4 disks:


Step1. Move the top 3 disks from A to B, using C as buffer. (Problem of n=3)
Step2. Move the largest disk from A to C. (Problem of n=1)
Step3. Move the top 3 disks from B to C, using A as buffer. (Problem of n=3)

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)

Now, let’s try to simulate what will happen


when we run move(3,"A","C","B").
move(3,"A","C","B")
To move the tower of 3 disks from A to C,
using B as buffer.
17
Example 6. Tower of Hanoi
def move(n, start, end, buffer):
if n == 1: # Base case
Now we recursively call
print("Moving disk from",start,"to",end) move(2,"A","B","C") to
else: # Progress
move(n-1, start, buffer, end) move the tower with 2
move(1, start, end, buffer) disks from A to B first.
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

You might also like