汉诺塔具体步骤
本帖最后由 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
有大佬知道吗 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柱
isdkz 发表于 2022-2-10 22:17
n代表几个圆盘,x代表第一条柱子,y代表第二条柱子,z代表第三条柱子
目的:把所有的圆盘的顺序原封不动地 ...
我想知道的是代码执行中,'z'是怎么替换x的,就是具体执行,你这和视频中讲的没区别啊! 本帖最后由 isdkz 于 2022-2-11 00:16 编辑
kaozhaohun 发表于 2022-2-11 00:13
我想知道的是代码执行中,'z'是怎么替换x的,就是具体执行,你这和视频中讲的没区别啊!
通过形参的位置替换的呀,你调用的时候传进去的是字符串'x'、'y'、'z',可是在函数内部使用的都是形参,形参的位置不一样,自然传进去的字符串的位置也会相应变化了 我看这上面z不是第三个形参,就是第四个形参,x是怎么替换到他的。 本帖最后由 isdkz 于 2022-2-11 00:19 编辑
你看到的只是表象,一层一层的递归中总有字符串'z'作为第二个形参x的 本帖最后由 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 换位置 isdkz 发表于 2022-2-11 00:18
你看到的只是表象,一层一层的递归中总有字符串'z'作为第二个形参x的
好吧,也是,谢谢 kaozhaohun 发表于 2022-2-11 00:22
好吧,也是,谢谢
{:5_109:} {:10_256:} 依然懵了个懵{:10_266:} 学习学习,似懂非懂最难受了 学习学习 {:10_279:} {:10_277:} {:5_109:} {:5_109:} {:10_249:} 学习
页:
[1]
2