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

为什么第二个就A -->C了? A--> B只执行一次A就只剩最后一个圆盘了?

为什么答案是 A --> B A --> C B --> C 。。。 为什么第二个就A -->C了? A--> B只执行一次A就只剩最后一个圆盘了?

正在回答

2 回答

汉诺塔:
# move(n, a, b, c)表示的是有n个盘子在a柱子上,将要移到b柱子上面去
def move(n, a, b, c):
# 如果a柱子上面只有一个盘子,则直接移到c柱子上面去并输出路径,结束递归
    if n == 1:  
        print a, '-->', c
        return
# 表示的是将n-1的盘子从a柱子上面移到b柱子上面去
    move(n-1, a, c, b)
# 输出最下面个盘子移从a移到c的路径
    print a, '-->', c
# 将b柱子上面的n-1个盘子移动到c柱子上面
    move(n-1, b, a, c)
运算过程:
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
        }
    }
}


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

move(n-1,a,c,b)是以C为辅助桩,把A上的n-1个放到B上;

move(n-1,b,a,c)是以A为辅助桩,把B上的n-1个放到C上;


第二个A -->C,A剩下最后一个移动到C,所以是A->C;每次移动式借助另外一个桩,把最底下的移动到C

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

举报

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

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

进入课程

为什么第二个就A -->C了? A--> B只执行一次A就只剩最后一个圆盘了?

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