码迷,mamicode.com
首页 > 其他好文 > 详细

汉诺塔问题

时间:2017-10-30 14:41:45      阅读:164      评论:0      收藏:0      [点我收藏+]

标签:logs   递归   需要   where   抽象   src   int   移动   color   

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

 

汉诺塔问题

标签:logs   递归   需要   where   抽象   src   int   移动   color   

原文地址:http://www.cnblogs.com/numen-fan/p/7753703.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!