汉诺塔问题
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)
以上是关于汉诺塔问题的主要内容,如果未能解决你的问题,请参考以下文章