1 汉诺塔问题
1.1 汉诺塔问题概述
✈️ 相传在古印度圣庙中,有一种被称为汉诺塔(Hanoi)的游戏。该游戏是在一块铜板装置上,有三根杆(编号A、B、C),在A杆自下而上、由大到小按顺序放置64个金盘(如图1)。游戏的目标:把A杆上的金盘全部移到C杆上,并仍保持原有顺序叠好。操作规则:每次只能移动一个盘子,并且在移动过程中三根杆上都始终保持大盘在下,小盘在上,操作过程中盘子可以置于A、B、C任一杆上。
1.2 思路分析
🍑 我们先在脑海里模拟一遍:假如 A杆处有从小到大的 2 个盘,我们需要怎么做呢?
将小盘由 A 杆移动到 B 杆; 即 A -> B;
将大盘由 A 杆移动到 C 杆;即 A -> C;
将小盘由 B 杆移动到 C 杆;即 B -> C;
模拟完成。
对于汉诺塔问题我们可以采用递归的思想解决问题,对递归有疑问的小伙伴可以看一下这篇文章:【JavaSE】深入浅出悟透递归
😗 我们将问题分为两种情况:
⭐️ star 1:A 杆只有 1 个盘
对于这种情况,我们只需要将 A 杆上的盘直接移动到 C 杆即可完成任务。
⭐️ star 2:A 杆有多个盘
对于多个盘我们可以看成两个部分,即上面的所有盘与最下面的盘
将上面的所有盘借助 C 杆 移动到 B;
将最下面的盘直接移动到 C 杆;
B 杆上面的盘继续借助 A 杆移动到 C 杆。