The problem of ‘Tower of Hanoi’ is a very classic problem/puzzle that is often used to teach recursion in Computer Science. The problem can be described as moving a set of disks from one rod to another using a third rod as a temporary one. There are three rods, and all the disks are placed at the first one initially. The sizes of the disks are noted as 1 to n, 1 being the smallest and n being the largest. In any time, a larger disk cannot be on top of a smaller one. And each time, it is only allowed to move one disk.
The problem looks complicated at first but it can be easily solved with recursion, decomposing the case n with a less-complicated situation of (n – 1). We can move the top n – 1 disks (treated as an individual) from rod ‘A’ to ‘B’, and move the disk n (the bottom, the largest disk) from rod ‘A’ to ‘C’, and finally move top n – 1 disks from ‘B’ to ‘C’, in this way, we move n disks from ‘A’ to ‘C’, using ‘B’ as the temporary rod.
Solving Hanoi Tower by Recursion
We can solve this by using Recursion: first move the top N-1 disks and then the N-th disk from A to C – finally move the N-1 disks to C.
#!/usr/bin/env python
# Hanoi Towers
# https://helloacm.com
total = 0
def hanoi(n, frm, to, tmp):
global total
if n:
hanoi(n - 1, frm, tmp, to)
print "Move %d From %s To %s" % (n, frm, to)
total += 1
hanoi(n - 1, tmp, to, frm)
hanoi(4, 'A', 'C', 'B')
print "total = ", total
For four disks on 3 rods, it prints the solution.
Move 1 From A To B
Move 2 From A To C
Move 1 From B To C
Move 3 From A To B
Move 1 From C To A
Move 2 From C To B
Move 1 From A To B
Move 4 From A To C
Move 1 From B To C
Move 2 From B To A
Move 1 From C To A
Move 3 From B To C
Move 1 From A To B
Move 2 From A To C
Move 1 From B To C
total = 15
We notice that the total steps for moving disks is 1, 3, 7, 15, 31 … for the problem size equal to 1, 2, 3, 4, 5 respectively. So we may guess the total number of steps for h(n)is the total number of disks, is
From the above algorithm, we have this recurrence formula:
One can image moving disks for problem size equal to 64 takes ages, because the total steps is
See Math Induction Proof of the minimal number of moves by Hanoi Tower: Teaching Kids Programming – Tower of Hanoi via Recursion (Math Induction Proof of Minimal Number of Moves)
–EOF (The Ultimate Computing & Technology Blog) —
Last Post: Floating Point Optimization Comparison in Delphi 2007 and XE3
Next Post: Delphi XE3, {$EXCESSPRECISION OFF}