|
发表于 2023-8-18 09:03:14
|
显示全部楼层
你的思考过程和课上的版本有一些不同之处。让我们来比较一下:
课上的版本:
- def hanoi(n, x, y, z):
- if n == 1:
- print(x, "-->", z)
- else:
- hanoi(n-1, x, z, y)
- print(x, "-->", y)
- hanoi(n-1, y, x, z)
-
- n = int(input("请输入汉诺塔的层数:"))
- hanoi(n, "A", "B", "C")
复制代码
你的版本:
- def hanoi(n, x, y, z):
- if n == 1:
- print(x, "-->", z)
- else:
- hanoi(n-1, y, x, z)
- print(x, "-->", y)
- hanoi(n-1, x, z, y)
- n = int(input("请输入汉诺塔的层数:"))
- hanoi(n, "X", "Y", "Z")
复制代码
两个版本的逻辑其实是相同的,只是对于中间柱子(y)和目标柱子(z)的使用顺序有所区别。
在课上的版本中,先将前(n-1)层汉诺塔从起始柱子(x)通过目标柱子(z)移动到中间柱子(y),然后将第n层汉诺塔从起始柱子(x)移动到目标柱子(z),最后将前(n-1)层汉诺塔从中间柱子(y)通过起始柱子(x)移动到目标柱子(z)。
而在你的版本中,先将前(n-1)层汉诺塔从起始柱子(x)通过目标柱子(z)移动到中间柱子(y),然后将第n层汉诺塔从起始柱子(x)移动到中间柱子(y),最后将前(n-1)层汉诺塔从中间柱子(y)通过目标柱子(z)移动到目标柱子(z)。
两个版本的实现思路是一致的,只是在具体的移动操作上有所不同。你的版本同样使用了递归的思想来解决汉诺塔问题,只是选择了不同的移动顺序。
希望这能帮助你理解两个版本之间的区别。如果还有其他问题,请随时问我。
如果问题已经解决,请设置最佳答案 |
|