Towers of Hanoi Hanoiklein.jpg.
-
Upload
myles-fickling -
Category
Documents
-
view
216 -
download
0
Transcript of Towers of Hanoi Hanoiklein.jpg.
![Page 1: Towers of Hanoi Hanoiklein.jpg.](https://reader035.fdocuments.us/reader035/viewer/2022081516/56649c6e5503460f949201ac/html5/thumbnails/1.jpg)
Towers of Hanoi
http://en.wikipedia.org/wiki/Image:Hanoiklein.jpg
![Page 2: Towers of Hanoi Hanoiklein.jpg.](https://reader035.fdocuments.us/reader035/viewer/2022081516/56649c6e5503460f949201ac/html5/thumbnails/2.jpg)
Towers of Hanoi• Move all the discs from the leftmost peg to the rightmost one.
– Only one disc may be moved at a time.
– A disc can be placed either on empty peg or on top of a larger disc.
start finish
Demo
![Page 3: Towers of Hanoi Hanoiklein.jpg.](https://reader035.fdocuments.us/reader035/viewer/2022081516/56649c6e5503460f949201ac/html5/thumbnails/3.jpg)
Recursive Solution
Move n-1 smallest discs right.
Move n-1 smallest discs right. Move largest disc left.
cyclic wrap-around
![Page 4: Towers of Hanoi Hanoiklein.jpg.](https://reader035.fdocuments.us/reader035/viewer/2022081516/56649c6e5503460f949201ac/html5/thumbnails/4.jpg)
The Recursive Process
![Page 5: Towers of Hanoi Hanoiklein.jpg.](https://reader035.fdocuments.us/reader035/viewer/2022081516/56649c6e5503460f949201ac/html5/thumbnails/5.jpg)
if (n == 0) return; move(n - 1, 1 - d); if (d == 1) System.out.println("Move disk " + n + “ right"); else System.out.println("Move disk " + n + “ left"); move(n - 1, 1 - d);
move(3, 1)
n = 3d = 1
![Page 6: Towers of Hanoi Hanoiklein.jpg.](https://reader035.fdocuments.us/reader035/viewer/2022081516/56649c6e5503460f949201ac/html5/thumbnails/6.jpg)
if (n == 0) return; move(n - 1, 1 - d); if (d == 1) System.out.println("Move disk " + n + “ right"); else System.out.println("Move disk " + n + “ left"); move(n - 1, 1 - d);
move(3, 1)
n = 3d = 1
![Page 7: Towers of Hanoi Hanoiklein.jpg.](https://reader035.fdocuments.us/reader035/viewer/2022081516/56649c6e5503460f949201ac/html5/thumbnails/7.jpg)
if (n == 0) return; move(n - 1, 1 - dir); if (dir == 1) System.out.println("Move disk " + n + " to right"); else System.out.println("Move disk " + n + " to left"); move(n - 1, 1 - dir);
move(3, 1)
n=3dir = 1 if (n == 0) return;
move(n - 1, 1 - d); if (d == 1) System.out.println("Move disk " + n + “ right"); else System.out.println("Move disk " + n + “ left"); move(n - 1, 1 - d);
move(2, 0)
n = 2d = 0
![Page 8: Towers of Hanoi Hanoiklein.jpg.](https://reader035.fdocuments.us/reader035/viewer/2022081516/56649c6e5503460f949201ac/html5/thumbnails/8.jpg)
if (n == 0) return; move(n - 1, 1 - dir); if (dir == 1) System.out.println("Move disk " + n + " to right"); else System.out.println("Move disk " + n + " to left"); move(n - 1, 1 - dir);
move(3, 1)
n=3dir = 1 if (n == 0) return;
move(n - 1, 1 - d); if (d == 1) System.out.println("Move disk " + n + “ right"); else System.out.println("Move disk " + n + “ left"); move(n - 1, 1 - d);
move(2, 0)
n = 2d = 0
![Page 9: Towers of Hanoi Hanoiklein.jpg.](https://reader035.fdocuments.us/reader035/viewer/2022081516/56649c6e5503460f949201ac/html5/thumbnails/9.jpg)
if (n == 0) return; move(n - 1, 1 - dir); if (dir == 1) System.out.println("Move disk " + n + " to right"); else System.out.println("Move disk " + n + " to left"); move(n - 1, 1 - dir);
move(3, 1)
n=3dir = 1 if (n == 0) return;
move(n - 1, 1 - dir); if (dir == 1) System.out.println("Move disk " + n + " to right"); else System.out.println("Move disk " + n + " to left"); move(n - 1, 1 - dir);
move(2, 0)
n = 2dir = 0 if (n == 0) return;
move(n - 1, 1 - d); if (d == 1) System.out.println("Move disk " + n + “ right"); else System.out.println("Move disk " + n + “ left"); move(n - 1, 1 - d);
move(1, 1)
n = 1d = 1
![Page 10: Towers of Hanoi Hanoiklein.jpg.](https://reader035.fdocuments.us/reader035/viewer/2022081516/56649c6e5503460f949201ac/html5/thumbnails/10.jpg)
if (n == 0) return; move(n - 1, 1 - dir); if (dir == 1) System.out.println("Move disk " + n + " to right"); else System.out.println("Move disk " + n + " to left"); move(n - 1, 1 - dir);
move(3, 1)
n=3dir = 1 if (n == 0) return;
move(n - 1, 1 - dir); if (dir == 1) System.out.println("Move disk " + n + " to right"); else System.out.println("Move disk " + n + " to left"); move(n - 1, 1 - dir);
move(2, 0)
n = 2dir = 0 if (n == 0) return;
move(n - 1, 1 - d); if (d == 1) System.out.println("Move disk " + n + “ right"); else System.out.println("Move disk " + n + “ left"); move(n - 1, 1 - d);
move(1, 1)
n = 1d = 1
![Page 11: Towers of Hanoi Hanoiklein.jpg.](https://reader035.fdocuments.us/reader035/viewer/2022081516/56649c6e5503460f949201ac/html5/thumbnails/11.jpg)
if (n == 0) return; move(n - 1, 1 - dir); if (dir == 1) System.out.println("Move disk " + n + " to right"); else System.out.println("Move disk " + n + " to left"); move(n - 1, 1 - dir);
move(3, 1)
n=3dir = 1 if (n == 0) return;
move(n - 1, 1 - dir); if (dir == 1) System.out.println("Move disk " + n + " to right"); else System.out.println("Move disk " + n + " to left"); move(n - 1, 1 - dir);
move(2, 0)
n = 2dir = 0 if (n == 0) return;
move(n - 1, 1 - dir); if (dir == 1) System.out.println("Move disk " + n + " to right"); else System.out.println("Move disk " + n + " to left"); move(n - 1, 1 - dir);
move(1, 1)
n = 1dir = 1
if (n == 0) return; move(n - 1, 1 - d); if (d == 1) System.out.println("Move disk " + n + “ right"); else System.out.println("Move disk " + n + “ left"); move(n - 1, 1 - d);
move(0, 0)
n = 0d = 0
![Page 12: Towers of Hanoi Hanoiklein.jpg.](https://reader035.fdocuments.us/reader035/viewer/2022081516/56649c6e5503460f949201ac/html5/thumbnails/12.jpg)
if (n == 0) return; move(n - 1, 1 - dir); if (dir == 1) System.out.println("Move disk " + n + " to right"); else System.out.println("Move disk " + n + " to left"); move(n - 1, 1 - dir);
move(3, 1)
n=3dir = 1 if (n == 0) return;
move(n - 1, 1 - dir); if (dir == 1) System.out.println("Move disk " + n + " to right"); else System.out.println("Move disk " + n + " to left"); move(n - 1, 1 - dir);
move(2, 0)
n = 2dir = 0 if (n == 0) return;
move(n - 1, 1 - d); if (d == 1) System.out.println("Move disk " + n + “ right"); else System.out.println("Move disk " + n + “ left"); move(n - 1, 1 - d);
move(1, 1)
n = 1d = 1
![Page 13: Towers of Hanoi Hanoiklein.jpg.](https://reader035.fdocuments.us/reader035/viewer/2022081516/56649c6e5503460f949201ac/html5/thumbnails/13.jpg)
if (n == 0) return; move(n - 1, 1 - dir); if (dir == 1) System.out.println("Move disk " + n + " to right"); else System.out.println("Move disk " + n + " to left"); move(n - 1, 1 - dir);
move(3, 1)
n=3dir = 1 if (n == 0) return;
move(n - 1, 1 - dir); if (dir == 1) System.out.println("Move disk " + n + " to right"); else System.out.println("Move disk " + n + " to left"); move(n - 1, 1 - dir);
move(2, 0)
n = 2dir = 0 if (n == 0) return;
move(n - 1, 1 - d); if (d == 1) System.out.println("Move disk " + n + “ right"); else System.out.println("Move disk " + n + “ left"); move(n - 1, 1 - d);
move(1, 1)
n = 1d = 1
![Page 14: Towers of Hanoi Hanoiklein.jpg.](https://reader035.fdocuments.us/reader035/viewer/2022081516/56649c6e5503460f949201ac/html5/thumbnails/14.jpg)
if (n == 0) return; move(n - 1, 1 - dir); if (dir == 1) System.out.println("Move disk " + n + " to right"); else System.out.println("Move disk " + n + " to left"); move(n - 1, 1 - dir);
move(3, 1)
n=3dir = 1 if (n == 0) return;
move(n - 1, 1 - dir); if (dir == 1) System.out.println("Move disk " + n + " to right"); else System.out.println("Move disk " + n + " to left"); move(n - 1, 1 - dir);
move(2, 0)
n = 2dir = 0 if (n == 0) return;
move(n - 1, 1 - d); if (d == 1) System.out.println("Move disk " + n + “ right"); else System.out.println("Move disk " + n + “ left"); move(n - 1, 1 - d);
move(1, 1)
n = 1d = 1
Print “Move disk 1 right”
![Page 15: Towers of Hanoi Hanoiklein.jpg.](https://reader035.fdocuments.us/reader035/viewer/2022081516/56649c6e5503460f949201ac/html5/thumbnails/15.jpg)
if (n == 0) return; move(n - 1, 1 - dir); if (dir == 1) System.out.println("Move disk " + n + " to right"); else System.out.println("Move disk " + n + " to left"); move(n - 1, 1 - dir);
move(3, 1)
n=3dir = 1 if (n == 0) return;
move(n - 1, 1 - d); if (d == 1) System.out.println("Move disk " + n + “ right"); else System.out.println("Move disk " + n + “ left"); move(n - 1, 1 - d);
move(2, 0)
n = 2d = 0
![Page 16: Towers of Hanoi Hanoiklein.jpg.](https://reader035.fdocuments.us/reader035/viewer/2022081516/56649c6e5503460f949201ac/html5/thumbnails/16.jpg)
if (n == 0) return; move(n - 1, 1 - dir); if (dir == 1) System.out.println("Move disk " + n + " to right"); else System.out.println("Move disk " + n + " to left"); move(n - 1, 1 - dir);
move(3, 1)
n=3dir = 1 if (n == 0) return;
move(n - 1, 1 - d); if (d == 1) System.out.println("Move disk " + n + “ right"); else System.out.println("Move disk " + n + “ left"); move(n - 1, 1 - d);
move(2, 0)
n = 2d = 0
![Page 17: Towers of Hanoi Hanoiklein.jpg.](https://reader035.fdocuments.us/reader035/viewer/2022081516/56649c6e5503460f949201ac/html5/thumbnails/17.jpg)
if (n == 0) return; move(n - 1, 1 - dir); if (dir == 1) System.out.println("Move disk " + n + " to right"); else System.out.println("Move disk " + n + " to left"); move(n - 1, 1 - dir);
move(3, 1)
n=3dir = 1 if (n == 0) return;
move(n - 1, 1 - d); if (dir == 1) System.out.println("Move disk " + n + “ right"); else System.out.println("Move disk " + n + “ left"); move(n - 1, 1 - dir);
move(2, 0)
n = 2d = 0
Print “Move disk 2 left”
![Page 18: Towers of Hanoi Hanoiklein.jpg.](https://reader035.fdocuments.us/reader035/viewer/2022081516/56649c6e5503460f949201ac/html5/thumbnails/18.jpg)
if (n == 0) return; move(n - 1, 1 - dir); if (dir == 1) System.out.println("Move disk " + n + " to right"); else System.out.println("Move disk " + n + " to left"); move(n - 1, 1 - dir);
move(3, 1)
n=3dir = 1 if (n == 0) return;
move(n - 1, 1 - dir); if (dir == 1) System.out.println("Move disk " + n + " to right"); else System.out.println("Move disk " + n + " to left"); move(n - 1, 1 - dir);
move(2, 0)
n = 2dir = 0 if (n == 0) return;
move(n - 1, 1 - d); if (d == 1) System.out.println("Move disk " + n + “ right"); else System.out.println("Move disk " + n + “ left"); move(n - 1, 1 - d);
move(1, 1)
n = 1d = 1
![Page 19: Towers of Hanoi Hanoiklein.jpg.](https://reader035.fdocuments.us/reader035/viewer/2022081516/56649c6e5503460f949201ac/html5/thumbnails/19.jpg)
3, 0
2, 1
1, 0 1, 0
2, 1
1, 0 1, 0
1 left 2 right 1 left 3 left 2 right 1 left1 left
n, left
1 14
2 7
3 4 65 9 10 1211 17 18 2019 23 24 2625
138 16 21 2722
2815
Recursive Tree
![Page 20: Towers of Hanoi Hanoiklein.jpg.](https://reader035.fdocuments.us/reader035/viewer/2022081516/56649c6e5503460f949201ac/html5/thumbnails/20.jpg)
Recursive Graphics
![Page 21: Towers of Hanoi Hanoiklein.jpg.](https://reader035.fdocuments.us/reader035/viewer/2022081516/56649c6e5503460f949201ac/html5/thumbnails/21.jpg)
21
![Page 22: Towers of Hanoi Hanoiklein.jpg.](https://reader035.fdocuments.us/reader035/viewer/2022081516/56649c6e5503460f949201ac/html5/thumbnails/22.jpg)
22
Htree
• H-tree of order n– Draw an H.
– Recursively draw 4 H-trees of order n-1, one connected to each tip.
and half the size
order 1
order 2 order 3
tip
size