The Hanoi tower problem stems from an ancient Indian legend: When Brahma created the world, he made three diamond pillars, and stacked 64 gold discs on a pillar from bottom to top in order of size. Brahma ordered the Brahman to rearrange the discs in order of size , and to specify that the discs should not be enlarged on the small discs , and that only one disc could be moved between the three pillars at a time . when all the golden discs are re-placed on another pillar, the world will perish in the sound of Thunder, and the Vatican, temples and sentient beings will perish.
Suppose a is the starting bar, B is the middle column, and C is the target column.
Start with the simplest example:
- If there is only one disc left on the A post, move the disc from the A column to the C bar. (A--C)
- If there are two discs left on the A column, first move the small disk from a to B, then move the large disk from the A to the C pillar, and finally the small disc on the B-pillar to the C-pillar. (A-to B, a-to C, B--and C)
- If there are three discs left on column A, then move the smallest disk from the A to the C-pillar, then the intermediate-sized disk from the A-column to the B-column, then the smallest disk on the C-pillar to the B-pillar, then the A-column of the largest disk to the C-pillar, and then the B-pillar of the smallest disk to the A-column, Continue to move the middle-sized disc on the B-pillar to the C-bar and finally move the smallest disc on the A-column to the C-pillar. (A-->c, a-->b, C--and B, a-and C, B--A, B--and C, a--and C)---the first three steps (a-->c, a-->b, C-- b) can be seen as a-to-B process, the middle of a-to-c process, the last three steps (b--A, B--and C, a-and C) can be seen as a B-to-C process
In summary, if you need to move n disks, the entire process can be abstracted into the following three steps:
1. Move a disc other than the chassis (n-1 disc) from A to B column
2. Move the chassis from column A to column C
3. Move the disk (n-1 discs) on the B-pillar to the C-pillar
Start with the most complex examples:
- If there are 64 discs on a column, the simplest way is to think of the 64 discs on the A column as a total of 2 discs (the chassis is a disc, the chassis above the 63 discs are a disk), so that the first column on the a bar to move to the B-column, and then the chassis from a column to the C column, Finally, the 63 discs on the B-pillar are moved to the C-pillar.
- If there are 63 discs on the A column, the 63 discs on the A column are imagined to be 2 discs (the chassis is a disc, the 62 discs above the chassis are a disk), so that only the 62 discs on the A post are moved to the B-pillar, and then the chassis is moved from the A-column to the C-pillar, Finally, the 62 discs on the B-pillar are moved to the C-pillar.
- And so on, until there is only one disk left on the A column, then move the disc from the A column to the C-bar.
As you can see, this problem can be solved by recursive methods by repeatedly nesting.
The code is as follows:
defHanoi (N,A,B,C):#n indicates the need to move several discs, a for the starting bar, b for the middle column, and C for the target column ifN==1:#If there are only 1 discs left, move the C-pillar from the A-column to PrintA" -", c)Else:#when n > 1 o'clock, move with an abstraction of 3 stepsHanoi (N-1,A,C,B)#Move the n-1 disc from A to B PrintA" -"C#move the chassis from a to CHanoi (N-1,B,A,C)#Move the n-1 disc on B to C
Try to move the 3 discs with the same steps as before:
Hanoi (3,"A","B","C" )
The results of the operation are as follows:
A-C
A-B
C-B
A-C
B-A
B-C
A-C
As you can see, moving 3 discs takes 7 steps. According to the projections, moving N discs requires a 2n-1 step. Assuming that each time a disk is moved is 1 seconds, and the Brahman keeps moving the disk, the world will be destroyed by a total of (264-1) seconds. According to 365 days a year, it takes 584,942,417,355.072 years for the world to be destroyed.
Solving the problem of the Nottingham tower with recursion (recursion Hanoi tower Python)