汉诺塔问题
本帖最后由 wk012233 于 2023-11-24 09:27 编辑def hanoi(n, x, y, z):#定义函数hanoi
if n > 0:
# 将 n-1 个盘子从源柱子移动到辅助柱子
hanoi(n-1, x, z, y)
# 将第 n 个盘子从源柱子移动到目标柱子
print(f"将盘子 {n} 从 {x} 移动到 {y}")
# 将 n-1 个盘子从辅助柱子移动到目标柱子
hanoi(n-1, z, y, x)
n = int(input('输入层数:'))# 盘子的数量
hanoi(n, 'A', 'C', 'B')# 将盘子从柱子 A 移动到柱子 C,辅助柱子为柱子 B
输入3时,结果打印出来是:
将盘子 1 从 A 移动到 C
将盘子 2 从 A 移动到 B
将盘子 1 从 C 移动到 B
将盘子 3 从 A 移动到 C
将盘子 1 从 B 移动到 A
将盘子 2 从 B 移动到 C
将盘子 1 从 A 移动到 C
现在我想弄明白第四步骤的3是怎么出来的,最好有大神能把整个的程序带参运行步骤给我梳理一遍 将盘子 1 从 A 移动到 C
将盘子 2 从 A 移动到 B
将盘子 1 从 C 移动到 B
将盘子 3 从 A 移动到 C
将盘子 1 从 B 移动到 A
将盘子 2 从 B 移动到 C
将盘子 1 从 A 移动到 C
这个结果是正确的,它展示了将 n 个盘子从 A 移动到 C 的步骤。在每一步中,我们都会移动一个盘子到目标柱子,并且保证辅助柱子始终为空或满足递归调用的条件,即保证盘子的顺序不会出错。
如果你想以列表的形式得到每一步的结果,可以稍作修改代码如下:
def hanoi(n, x, y, z, result):
if n > 0:
hanoi(n-1, x, z, y, result)
result.append((n, x, y))
hanoi(n-1, z, y, x, result)
n = int(input('输入层数:'))
result = []
hanoi(n, 'A', 'C', 'B', result)
for step in result:
print(f"将盘子 {step} 从 {step} 移动到 {step}")
这样,结果就会以列表的形式存储在 result 变量中,然后依次打印出来。
以上回复来自 -- ChatGPT(FishC官方接口),如未能正确解答您的问题,请继续追问。 如果您运行上述代码并输入层数,它将打印出汉诺塔问题的解决步骤。结果会根据您输入的盘子数量而有所不同。
请注意,您在问题中没有提供具体的结果。如果您希望我提供特定层数的结果,请告诉我层数,我将为您提供相应的结果。
回复来自于CHAT-GPT。回复仅供参考,如有人工回答,最佳答案请优先选择人工 不要去深究递归程序里面的细节,你只需要知道编写该程序的大体思路。 本帖最后由 wk012233 于 2023-11-24 10:28 编辑
画了个思维导图,好像能弄明白了
页:
[1]