c*******s 发帖数: 737 | 1 Python汉诺塔函数
def move(n,x,y,z):
if n==1:
print(x,'-->',z)
else:
move(n-1,x,z,y)#将前n-1个盘子从x移动到y上
move(1,x,y,z)#将最底下的最后一个盘子从x移动到z上
move(n-1,y,x,z)#将y上的n-1个盘子移动到z上
print(move(3,'a','b','c'))
网络上的解释对新手小白来说根本没解释清楚。哪位大侠能够解释分解一下详细的每一
个步骤?
感谢!!! | N**********d 发帖数: 2466 | | g***n 发帖数: 14250 | 3 好吧,小白。
自己拿不同大小的三个硬币试试呗。三个太多就先用两个。
(1) 把两个挪到新的位置,
再把底下大的挪到剩下的位置,
再重复 (1) 把两个挪到大的上面。
这就是代码的逻辑
如果你想搞清楚每一步怎么挪的,在函数入口把参数打印出来就知道了 | c*******s 发帖数: 737 | 4 感谢! 函数入口打印参数怎么操作。至于您说的这个逻辑,我是理解的。但是把逻辑
分解成步骤,混乱啊我
【在 g***n 的大作中提到】 : 好吧,小白。 : 自己拿不同大小的三个硬币试试呗。三个太多就先用两个。 : (1) 把两个挪到新的位置, : 再把底下大的挪到剩下的位置, : 再重复 (1) 把两个挪到大的上面。 : 这就是代码的逻辑 : 如果你想搞清楚每一步怎么挪的,在函数入口把参数打印出来就知道了
| c*******s 发帖数: 737 | 5 感觉不对啊
【在 N**********d 的大作中提到】 : 从最后往前推
| m*****n 发帖数: 3575 | 6 这个表示没有任何意义,是个笨蛋编的习题。
move(n-1,x,z,y) 无非是再嵌套一下原函数,如果n-1还大于1,就还执行这里,那么一
共执行了n-1次,直到最后一次执行到n=1,输出x -> y
这傻瓜玩意儿不储存数据,三个塔上连盘子数量都不标,自己嵌套玩呢?
是哪个网站出这么低级的教案? | s******i 发帖数: 1 | | g***n 发帖数: 14250 | 8 用 print 打印参数啊
【在 c*******s 的大作中提到】 : 感谢! 函数入口打印参数怎么操作。至于您说的这个逻辑,我是理解的。但是把逻辑 : 分解成步骤,混乱啊我
| g***n 发帖数: 14250 | 9 每一步只要告诉你从哪个位置搬一个盘子到哪个位置,
跟盘子数量没关系啊
【在 m*****n 的大作中提到】 : 这个表示没有任何意义,是个笨蛋编的习题。 : move(n-1,x,z,y) 无非是再嵌套一下原函数,如果n-1还大于1,就还执行这里,那么一 : 共执行了n-1次,直到最后一次执行到n=1,输出x -> y : 这傻瓜玩意儿不储存数据,三个塔上连盘子数量都不标,自己嵌套玩呢? : 是哪个网站出这么低级的教案?
| g***n 发帖数: 14250 | 10 电脑的逻辑就是,3 个盘子搬不动,那搬 2 个,
2 个还搬不动,那就搬 1 个,
搬完一个,刚才说要搬 2 个的,回去按步骤干完,
然后再回去把 3 个按步骤干完。
这里每个步骤都带有上面这种回溯。人脑记不住但电脑记得住怎么回溯,没问题。 | a***m 发帖数: 5037 | |
|