我设计了和课程上不同的递归版汉诺塔,思维不同在哪里
课上的版本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")
低级传不了图片(QWQ)
| | |
| | |
| | |
X Y Z
我的思考过程是要移动n层汉诺塔到Z,
就要先将前(n - 1)汉诺塔移动到Y,就可以将第n层汉诺塔移动到Z,再将将(n - 1)层汉诺塔移动到Z
接着思考如何移动(n - 1)层汉诺塔到Z,
就要先将前(n - 2)汉诺塔移动到Y,就可以将第(n - 1)层汉诺塔移动到Z,再将将(n - 2)层汉诺塔移动到Z
接着思考如何移动(n - 2)层汉诺塔到Z,
就要先将前(n - 3)汉诺塔移动到Y,就可以将第(n - 2)层汉诺塔移动到Z,再将将(n - 3)层汉诺塔移动到Z
。。。。。。
以此类推
这是我的思考过程,也能用递归解决汉诺塔问题
但没有看明白课上版本的思维过程 你设计的递归版汉诺塔算法和课上的版本在思维上有一些差异。
首先,我们来看课上的版本。课上的版本是一个典型的递归算法,它使用了分治的思想。当只有一个盘子时,直接将盘子从x移动到z;否则,先将前(n-1)个盘子从x移动到y,然后将第n个盘子从x移动到z,最后将前(n-1)个盘子从y移动到z。这个思路清晰,符合汉诺塔问题的解决思路。
而你设计的版本则有所不同。你的思维过程是将第n个盘子从x移动到z,然后再将前(n-1)个盘子从y移动到z。这种思路并没有直接考虑到将前(n-1)个盘子从x移动到y的步骤,而是直接将它们从y移动到z。这样的思路在解决汉诺塔问题上是可行的,但不够符合问题的本质,也不符合典型的分治思想。
课上的版本更加直观和易于理解,因为它直接考虑了将前(n-1)个盘子从x移动到y的步骤,而你的版本则需要通过递归来实现这一步骤。递归是一种非常强大的解决问题的工具,但在某些情况下可能会使问题的思路变得复杂。
总结来说,你的版本和课上的版本在思维上的差异在于你没有直接考虑到将前(n-1)个盘子从x移动到y的步骤,而是通过递归来实现这一步骤。课上的版本更加直观和易于理解,符合汉诺塔问题的解决思路。 你的思考过程和课上的版本有一些不同之处。让我们来比较一下:
课上的版本:
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)。
两个版本的实现思路是一致的,只是在具体的移动操作上有所不同。你的版本同样使用了递归的思想来解决汉诺塔问题,只是选择了不同的移动顺序。
希望这能帮助你理解两个版本之间的区别。如果还有其他问题,请随时问我。
如果问题已经解决,请设置最佳答案 isdkz 发表于 2023-8-18 09:02
你设计的递归版汉诺塔算法和课上的版本在思维上有一些差异。
首先,我们来看课上的版本。课上的版本是一 ...
能再介绍一下分治思想吗{:9_241:}
页:
[1]