想象有三根柱子 x, y, z,我们要将 x 上的 64 个盘子移动到 z 上。
对于游戏的解决思路,我们可以简单的分解为三个步骤:
①将前 63 个盘子从 x 移动到 y 上
②将最底下的第 64 个盘子从 x 移动到 z 上
③将 y 上的 63 个盘子移动到 z 上
下面我们遇到了两个问题
①问题一:如何将 x 上的 63 个盘子借助 z 移动到 y 上
②问题二:如何将 y 上的 63 个盘子借助 x 移动到 z 上
我们可以将以上两个问题做出如下拆解:
问题一: “如何将 x 上的 63 个盘子借助 z 移动到 y 上” 拆解为:
①将前 62 个盘子从 x 移动到 z 上
②将最底下的第 63 个盘子移动到 y 上
③将 z 上的 62 个盘子移动到 y 上
问题二: “如何将 y 上的 63 个盘子借助 x 移动到 z 上” 拆解为:
①将前 62 个盘子从 y 移动到 x 上
②将最底下的第 63 个盘子移动到 z 上
③将 x 上的 62 个盘子移动到 y 上
运用递归的思想可以很容易的写出汉诺塔的代码:
def hanoi(n, x, y, z): #将x上的n个盘子借助y