汉诺(Hanoi)塔问题:古代有一个梵塔,塔内有三个座A、B、C,A座上有64个盘子,盘子大小不等,大的在下,小的在上(如图找了张5个的,意思一样)。有一个和尚想把这64个盘子从A座移到B座,但每次只能允许移动一个盘子,并且在移动过程中,3个座上的盘子始终保持大盘在下,小盘在上。在移动过程中可以利用B座,要求打印移动的步骤。如果只有一个盘子,则不需要利用B座,直接将盘子从A移动到C。
分析:
以5个盘子为例,进行分析。
先将上面4个盘子看成一个整体,那么第一步,需要借助B柱子,将上面4个盘子放在B柱子上,然后将A柱子最底的第5个盘子放到C柱子上,如下图所示:
那么问题就依赖于B柱子上的4个盘子如何移动,也就是n-1个盘子如何从B移动到C上面,这个问题又依赖于3个盘子如何移动
最终,转化为1个盘子移动的问题,最终状态:
伪代码: