你的思考过程和课上的版本有一些不同之处。让我们来比较一下:
课上的版本: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)。
两个版本的实现思路是一致的,只是在具体的移动操作上有所不同。你的版本同样使用了递归的思想来解决汉诺塔问题,只是选择了不同的移动顺序。
希望这能帮助你理解两个版本之间的区别。如果还有其他问题,请随时问我。
如果问题已经解决,请设置最佳答案 |