kaozhaohun 发表于 2022-2-10 20:48:12

汉诺塔具体步骤

本帖最后由 kaozhaohun 于 2022-2-10 20:58 编辑

def hanoi(n,x,y,z):
    if n==1:
      print(x,"-->",z)
    else:
      hanoi(n-1,x,z,y)
      print(x,"-->",z)
      hanoi(n-1,y,x,z)
n = int(input("请输入层数"))
hanoi(n,"x","y","z"),

请输入层数3
x --> z
x --> y
z --> y搞不懂"z"是怎么替代x的,我找了半天视频没一个人说过这问题,有谁能说说吗?
x --> z
y --> x
y --> z
x --> z

kaozhaohun 发表于 2022-2-10 20:59:56

有大佬知道吗

isdkz 发表于 2022-2-10 22:17:04

n代表几个圆盘,x代表第一条柱子,y代表第二条柱子,z代表第三条柱子
目的:把所有的圆盘的顺序原封不动地移动到第三根柱子

如果只有一个圆盘,则直接从第一根柱子移动到第三根柱子,
if n==1:
      print(x,"-->",z)
x 为第二个形参,z为第四个形参,也就是说是由第二个形参移动到第四个形参
如果不只有一个圆盘,则将除最底下的圆盘外的其它圆盘移动到第二根柱子,即y柱,
hanoi(n-1,x,z,y)   # 第二个形参移动到第四个形参,x移动到y
然后将最底下的移动到第三根柱子,即z柱
print(x,"-->",z)
最后将第二根柱子上的圆盘移动到第三根柱子,即y柱移动到z柱,所以此时由y充当第二个形参,z充当第四个形参,因为圆盘数始终充当第一个形参,剩下的那根柱子就是第三个形参了
hanoi(n-1,y,x,z)   # y柱移动到z柱

kaozhaohun 发表于 2022-2-11 00:13:06

isdkz 发表于 2022-2-10 22:17
n代表几个圆盘,x代表第一条柱子,y代表第二条柱子,z代表第三条柱子
目的:把所有的圆盘的顺序原封不动地 ...

我想知道的是代码执行中,'z'是怎么替换x的,就是具体执行,你这和视频中讲的没区别啊!

isdkz 发表于 2022-2-11 00:14:44

本帖最后由 isdkz 于 2022-2-11 00:16 编辑

kaozhaohun 发表于 2022-2-11 00:13
我想知道的是代码执行中,'z'是怎么替换x的,就是具体执行,你这和视频中讲的没区别啊!

通过形参的位置替换的呀,你调用的时候传进去的是字符串'x'、'y'、'z',可是在函数内部使用的都是形参,形参的位置不一样,自然传进去的字符串的位置也会相应变化了

kaozhaohun 发表于 2022-2-11 00:15:58

我看这上面z不是第三个形参,就是第四个形参,x是怎么替换到他的。

isdkz 发表于 2022-2-11 00:18:39

本帖最后由 isdkz 于 2022-2-11 00:19 编辑

你看到的只是表象,一层一层的递归中总有字符串'z'作为第二个形参x的

isdkz 发表于 2022-2-11 00:21:37

本帖最后由 isdkz 于 2022-2-11 00:22 编辑

z和y换过位置,而y和x又换过位置,所以z会出现在x的位置上
hanoi(n-1,x,z,y)    # z 和 y 换位置
print(x,"-->",z)
hanoi(n-1,y,x,z)    # y 和 x 换位置

kaozhaohun 发表于 2022-2-11 00:22:46

isdkz 发表于 2022-2-11 00:18
你看到的只是表象,一层一层的递归中总有字符串'z'作为第二个形参x的

好吧,也是,谢谢

心驰神往 发表于 2022-2-11 08:14:07

kaozhaohun 发表于 2022-2-11 00:22
好吧,也是,谢谢

{:5_109:}

阿萨德按时 发表于 2022-2-11 08:34:00

{:10_256:}

guoluren 发表于 2022-2-11 08:36:40

依然懵了个懵{:10_266:}

elven08 发表于 2022-2-11 08:52:35

学习学习,似懂非懂最难受了

1molHF 发表于 2022-2-11 08:57:39

学习学习

伽羅~ 发表于 2022-2-11 09:17:43

{:10_279:}

tianlai7266 发表于 2022-2-11 09:37:43

{:10_277:}

fxj2002 发表于 2022-2-11 09:43:24

{:5_109:}

hornwong 发表于 2022-2-11 10:38:04

{:5_109:}

Passepartout 发表于 2022-2-12 15:01:03

{:10_249:}

青岛彭于晏 发表于 2022-7-25 11:57:45

学习
页: [1] 2
查看完整版本: 汉诺塔具体步骤