Discuss / Python / 要把大象装冰箱,总共分几步?

要把大象装冰箱,总共分几步?

Topic source

要理解递归首先你得理解递归。 递归题就是找感觉,要有要把大象装冰箱总共分几步?这样的思维方式, 一但去抠细节你就中计了

汉诺塔问题有三根柱子,我给它们分别命名为起始柱src,临时柱tmp,目的柱dst 盘子一共分两种情况: 1.只有1个盘子 这种情况下,直接从起始柱src 移动到 目的柱dst ,完成任务。

2.有1个以上的盘子 假如有n个盘子在起始柱,

  1. 首先把第n个盘子上方的n-1个盘子搬到临时柱。
  2. 然后把第n个盘子从起始柱移动到目的柱
  3. 最后把n-1个盘子从临时柱搬到目的柱 任务完成

知道这些就够了,千万别XJB去想细节!!! 知道这些就够了,千万别XJB去想细节!!! 知道这些就够了,千万别XJB去想细节!!!

def move(from,to): #将盘子从from移动到to,动画效果需要脑补
    print(from,'->',to)

def hanoi(n,src,tmp,dst):#将n个盘子从src搬到dst
    if n == 1: #只有一个盘子的情况
        move(src,dst)
    else: #有一个以上盘子的情况
        hanoi(n-1,src,dst,tmp) #将上方的n-1个盘子从src搬到tmp
        move(src,dst) #将第n个盘子从src轻松愉快地移动到dst
        hanoi(n-1,tmp,src,dst) #擦屁股,将tmp上的n-1个盘子搬到dst上


hanoi(3,'A','B','C')

dalao!!!你成功阻断了我的人脑递归!

卷发pama

#3 Created at ... [Delete] [Delete and Lock User]

这么一解释,超清楚,赞!

一直在纠结

    move(n-1,a,c,b)
    move(n-1,b,a,c)

n-1后面的abc顺序到底是怎么出来的,如果把 move[1],move[3]看成是起始位置和目的地的话,就很好理解了。

你这样写的代码很容易理解,但是我就是理解不了参考答案的代码,虽然知道这两个是等价的....

斯人已巳

#5 Created at ... [Delete] [Delete and Lock User]

我就是扣细节中计的 愣是一直在想,那n-1个是怎么移动,怎么写 唉……还是理解的不行 感觉倍受打击……

本来想一个人独立写答案,但被多个盘子时的细节打败了,被打击到停止学习py2个多月了。 今天终于鼓起勇气再来挑战,还是不会,不过这次学乖了来看一下同学们的回答。

看了楼主的解释,简单粗暴,终于勉强能看懂答案了。 不过还是不懂py具体是怎么找出步骤的……

总之我接着学下去吧

按你代码运行了一下,怎么不行你呢,总是运行错误

耀話你知

#8 Created at ... [Delete] [Delete and Lock User]

wow,大神。感觉你的太好理解了

a,b,c a,c,b b,a,c b,c,a c,a,b c,b,a

move(n-1,a,c,b) move(n-1,b,a,c)

我想这个公式应该跟这个排序有关

大象放冰箱分3步

1:打开冰箱 2:放大象 3:关上冰箱

你说的对别想太多,如果每一行代码加上注释会有助于快速理解


  • 1
  • 2

Reply