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

汉诺塔move里参数如何排列的

def move(3, a, b, c):
    if n==1:
        print a,'-->',c
        return
    move(2,a,c,b)
    print a,'-->',c
    move(2,b,a,c)

 move(2,a,c,b)
      ...
      move(1,a,b,c)    A-->C
      print ...        A-->B
      move(1,c,b,a)    C-->B
 print ...             A-->C
 move(2,b,a,c)
      ...         
      move(1,c,a,b)    B-->A
      print ...        B-->C
      move(1,a,b,c)    A-->C

我这只是在用结果推过程,那么像move(1,c,b,a),move(1,c,a,b)这里的参数是怎么排序的呢?

正在回答

4 回答

我明白你的意思,我也是不懂这的变量是怎么变的。逻辑其他的都懂。就是不知道这几个变量是依据什么这样排序的,还是这个函数就是规定“只要是借助的位置b就把它b放中间”???不懂不懂

0 回复 有任何疑惑可以回复我~
汉诺塔:
Move(4,A,B,C){
    Move(3,A,C,B){
        Move(2,A,B,C){
            Move(1,A,C,B){}    //A->B
            print A->C         //A->C
            Move(1,B,A,C){}    //B->C
        }
        print A->B             //A->B
        Move(2,C,A,B){
            Move(1,C,B,A){}    //C->A
            print C->B         //C->B
            Move(1,A,C,B){}    //A->B
        }
    }
    print A->C                 //A->C
    Move(3,B,A,C){
        Move(2,B,C,A){
            Move(1,B,A,C){}    //B->C
            print B->A         //B->A
            Move(1,C,B,A){}    //C->A
        }
        print B->C             //B->C
        Move(2,A,B,C){
            Move(1,A,C,B){}    //A->B
            print A->C         //A->C
            Move(1,B,A,C){}    //B->C
        }
    }
}


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

Sumh

想请问一下,第六句 Move(1,B,A,C){} //B->C 为啥会执行print语句啊?
2018-08-17 回复 有任何疑惑可以回复我~

其实这个很好理解,if n==1那段代码就是move(1,A,B,C),后面的那个就跟把大象放进冰箱一样的道理分三步:1、把n-1个盘子借助C从A-->B即move(n-1,A,C,B);2、把剩下的那一个盘子从A-->C即move(1,A,B,C)或者直接print("A-->C");3、把刚才移到B上的那n-1个盘子借助A移到C上即move(n-1,B,A,C)

希望对你有所帮助!哈哈……

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

mov(2,a,c,b)相当于要将两个盘子由a借助c移动到b, 那就需要先将a的n-1(也就是1)个盘子借助b移动到c;即mov(1,a,b,c)   。另一个类似。核心思想就是如果a有N个圆盘,可以看成a有1个圆盘(底盘) + (N-1)个圆盘,首先需要把 (N-1) 个圆盘移动到 b,然后,将 a的最后一个圆盘移动到c,再将b的(N-1)个圆盘移动到c。

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

大的小彩笔 提问者

你没明白我问的是啥,代码知道,如何移动的也懂。我是想知道在不考虑如何移动的前提下去写move的参数变化,例如:move(3,a,b,c)-->move(2,a,c,b)-->move(1,a,b,c)只是bc参数换位置,但是move(2,a,c,b)-->move(1,c,b,a)或者move(2,b,a,c)-->move(1,a,b,c)这是怎么变换的
2018-04-10 回复 有任何疑惑可以回复我~
#2

大的小彩笔 提问者 回复 大的小彩笔 提问者

最后那个是move(2,b,a,c)-->move(1,c,a,b)
2018-04-10 回复 有任何疑惑可以回复我~

举报

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

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

进入课程

汉诺塔move里参数如何排列的

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