由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Military版 - 求助,大侠帮忙解释下汉诺塔的python程序代码执行逻辑步骤呀
进入Military版参与讨论
1 (共1页)
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
2
从最后往前推
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
7
看这个人的视频就明白了:
https://www.youtube.com/watch?v=1QgJEcnsqsQ
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
11
递归, 去找一些讲递归的文章看看吧
1 (共1页)
进入Military版参与讨论