Как вы перемещаете N дисков из башни A в башню B?
- Переместите диски N-1 из башни А в башню С.
- Переместите нижний диск от башни A к башне B.
- Переместите диски N-1 из башни C в башню B.
Код является довольно прямой реализацией этого. Если вы предполагаете, что можете перемещать произвольное количество дисков из одной башни в другую, то это явно работает. Как вы перемещаете диски N-1 из башни А в башню С? Итак, вы перемещаете диски N-2 из башни A в башню B, затем перемещаете N-1-й диск из башни A в башню C, затем перемещаете диски N-2 из башни B в башню C. И повторите ... *
В конце концов рекурсия останавливается, потому что у вас есть один диск для перемещения.
Интересным упражнением является «написание тестового жгута, который гарантирует, что недопустимые ходы никогда не будут сделаны».
ОК - я запустил код. Его визуализация процесса ужасна. Очень трудно понять, что происходит. Но это прямой отчет о том, что делает алгоритм. И что теперь?
1 диск
Enter no of DISC in Tower of Hanoi : 1
Tower of Hanoi using 1 DISCS
Move DISC from X to Z
2 диска
Enter no of DISC in Tower of Hanoi : 2
Tower of Hanoi using 2 DISCS
Move DISC from X to Y
Move DISC from X to Z
Move DISC from Y to Z
Обратите внимание, что он перемещает диски из X в Z. Как вы перемещаете 2 диска из X в Z? Переместите верхний диск от X до Y. Переместите нижний диск от X до Z. Переместите оригинальный верхний диск от Y до Z.
3 диска
Enter no of DISC in Tower of Hanoi : 3
Tower of Hanoi using 3 DISCS
Move DISC from X to Z
Move DISC from X to Y
Move DISC from Z to Y
Move DISC from X to Z
Move DISC from Y to X
Move DISC from Y to Z
Move DISC from X to Z