汉诺塔问题

  我们在学习递归时,总会认识一个问题,那就是汉诺塔问题,问题很简单,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)

 

posted @ 2017-10-30 11:20  小小范同学  阅读(266)  评论(0编辑  收藏  举报