汉诺塔问题

Posted 小小范同学

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了汉诺塔问题相关的知识,希望对你有一定的参考价值。

  我们在学习递归时,总会认识一个问题,那就是汉诺塔问题,问题很简单,A,B,C三根柱子,将盘子移来移去,要求小盘子必须在大盘子的上面,最后将所有盘子从一个柱子移动到另一个柱子;那么我们看只有一根柱子的时候

很简单直接将从from移动到to,不用借助中间的helper柱子;

那么此时有n个盘子;其实我们将问题想得抽象和简单点,那就是将前n-1个盘子,从from移动到helper上,借助我们的to,因为这时候我们才能拿到最下面的n第个盘子,并将其移动到to上面,剩下的n-1个盘子,我们同样抽象一点,将其从helper上直接移动到to上,此时借助的是from柱子;

 

分析可得:我们一共只需要三步

step1:将n-1个盘子从from移动到helper上,借助to

step2:将第n个盘子从from移动到to

step3:将n-1个盘子从helper上移动到to

所以有代码(python):

#!/usr/bin env python3
# -*- coding:utf-8 -*-
def hanoi(n,fromwhere,to,helper):#注意这里的参数代表什什么意思啊,最后一个参数时helper啊
    if n == 1:
        move(fromwhere,to)
        return
    hanoi(n-1,fromwhere,helper,to)
    move(fromwhere,to)
    hanoi(n-1,helper,to,fromwhere)

def  move(fromwhere,to):
        print(""+fromwhere+"移动到"+to)

 

以上是关于汉诺塔问题的主要内容,如果未能解决你的问题,请参考以下文章

汉诺塔问题的详解-附代码

C语言汉诺塔问题

代写Haskell程序 汉诺塔汉诺塔编程代码代写

递归_汉诺塔问题

汉诺塔(代码记录+注释)

详解汉诺塔问题