wk012233 发表于 2023-11-24 09:25:43

汉诺塔问题

本帖最后由 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是怎么出来的,最好有大神能把整个的程序带参运行步骤给我梳理一遍

FishC_GPT 发表于 2023-11-24 09:26:25

将盘子 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官方接口),如未能正确解答您的问题,请继续追问。

Mike_python小 发表于 2023-11-24 09:27:07

如果您运行上述代码并输入层数,它将打印出汉诺塔问题的解决步骤。结果会根据您输入的盘子数量而有所不同。

请注意,您在问题中没有提供具体的结果。如果您希望我提供特定层数的结果,请告诉我层数,我将为您提供相应的结果。

回复来自于CHAT-GPT。回复仅供参考,如有人工回答,最佳答案请优先选择人工

tommyyu 发表于 2023-11-24 09:41:28

不要去深究递归程序里面的细节,你只需要知道编写该程序的大体思路。

wk012233 发表于 2023-11-24 10:26:10

本帖最后由 wk012233 于 2023-11-24 10:28 编辑

画了个思维导图,好像能弄明白了
页: [1]
查看完整版本: 汉诺塔问题