为了账号安全,请及时绑定邮箱和手机立即绑定

关于汉诺塔中abc的问题

def move(n, a, b, c):    
    if n == 1:    
        print('move', a, '-->', c)    
    else:    
        move(n-1, a, c, b)    
        move(1, a, b, c)    
        move(n-1, b, a, c)    
move(4, 'A', 'B', 'C')

我又看到有人解释,move(n-1, a, c, b)的意思就是:n-1个盘借c柱从a柱移动到b柱。运行的时候电脑怎么就知道这个意思...?我不理解啊.....................

正在回答

3 回答

def move(n, a, b, c):
    if n ==1:
        print a, '-->', c
        return
    move(n-1, a, c, b)
    print a, '-->', c
    move(n-1, b, a, c)
move(4, 'A', 'B', 'C')

按照给的标准答案解释吧

函数下的前三行,当减小到1时(下面的n-1个已经排到c上了)直接从a拿到c

move(n-1, a, c, b)    就是先不管最下面的大环,将上面的n-1个小环全部放到b上
print a, '-->', c    输出一次将刚才不管的大环直接从a拿到c
move(n-1, b, a, c)    以上操作变成a上无环,b上n-1个环,c上一个最大环,这时就相当于需要将b上的环全部放到c上,就可以看成初始问题一样了,只是n减小了,所以再次调用函数
0 回复 有任何疑惑可以回复我~

电脑认的只是你写的代码,它只要找你写的逻辑来运行。move(n-1, a, c, b)中b成了第四个参数,,a还是第二个参数。move(n, *, *, *) : ...的意思就是讲第二个参数的n个盘移到第四个参数位置

0 回复 有任何疑惑可以回复我~

此时c的位置传的是B

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
初识Python
  • 参与学习       758622    人
  • 解答问题       8667    个

学python入门视频教程,让你快速入门并能编写简单的Python程序

进入课程

关于汉诺塔中abc的问题

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信