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

这个到底是怎么顺序啊 我好晕

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(5, 'A', 'B', 'C')


正在回答

6 回答

为什么我的感觉跟各位不一样呢?

move函数几个形式参数:第一个表示需要移动的圆盘数,第二个(不一定是a)表示准备移走的柱子,第三个表示过渡柱子,第四个参数表示目标柱子。

if n == 1:

print (a,'-->',c) #这其实是只有一个圆盘需要从A到C的情况。所有递归,最终都是走到这一步。

return #这是结束递归,省略了None。没有这句的话,递归没办法结束。

move(n-1,a,c,b) #将A柱的n-1个盘移到B柱,这里毫无争议。注意形参顺序变化了。

print  a,'-->',c  #这句话才是第一个柱子的第n个圆盘移动到目标柱子。

move(n-1, b, a, c)) #过渡柱子B上(n-1)个圆盘B递归移动到目标柱子C



3 回复 有任何疑惑可以回复我~
#1

我在山那边

你的理解是对的呀~
2016-02-10 回复 有任何疑惑可以回复我~
#2

Dualpit

你这个才是对的
2016-03-17 回复 有任何疑惑可以回复我~
#3

慕粉3220155

我有一个问题。。。。那为什么会打出B --> C呢??能麻烦你解释下吗。。。
2016-04-26 回复 有任何疑惑可以回复我~

我用记事本写了个具体的过程 不知道你看不看得懂http://img1.sycdn.imooc.com//566ebb6f0001349b00370663.jpg

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

def move(n, a, b, c):

if n == 1:

print (a,'-->',c)#将A柱的最后1个盘移到C柱

return

move(n-1,a,c,b)#将A柱的N-1个盘移到B柱,

print (a,'-->',c)

move(n-1,b,a,c)#将B柱的N-1个盘移到C柱

move(4, 'A', 'B', 'C')


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

其实就是把开始A柱的n-1个盘子挪到B上,在move(n-1,a,c,b)中的b就是开始函数定义的c,因为这是对定义的函数的调用。因为函数开始定义的就是把a的所有都挪到c上。

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

def move(n, a, b, c):

    if n==1:       #第一步很容易理解,就是如果只有一个,就把a直接挪到c

        print a,'-->',c

        return

    move(n-1,a,c,b)#就是把之前的n-1个都先放到b上

    print a,'-->',c #这里虽然说是print a,'-->',c,实质是把东西从A柱挪到B柱

    move(n-1,b,a,c)#由于上面已经把n-1个都放到b上了,此时就是把b全部挪到c上。

move(5, 'A', 'B', 'C')

1 回复 有任何疑惑可以回复我~
#1

慕姐4424294

那个 问下啊 求解释下 move(n-1,a,c,b) print a,'-->',c move(n-1,b,a,c) 这里面的 这句 print a,'-->',c 到底是什么意思
2015-10-23 回复 有任何疑惑可以回复我~

汉诺塔问题

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

举报

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

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

进入课程

这个到底是怎么顺序啊 我好晕

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