什么是汉诺塔
将A塔上n个金属盘片移动到C塔上,一次移动一个盘;无论何时,小盘在上,大盘在下。
思考
这个问题应该使用递归的方法思考,也就是说无论如何,第n个塔片最终应该放在C的最底下,所以必须保证C上没有塔片,且A上只有第n个塔片,所以第一步是把第1~(n-1)个塔片全部搬到塔B上,并且是从上到下从小到大依次排列的,先不要想怎么做。
这个时候我们就可以轻松的把第n个移动到塔C的最下端了。
那么接下来应该是n-1移动到塔C,也是一样的原理先把他上面那n-2个家伙挪开,挪到塔A上,这样n-1就可以去到他该去的位置了。
这时候我们发现不管多少个塔片移动到策略都是一样的:
假设我们要移动第n个塔片到目标塔
先把他上面的n-1个塔片移到辅助塔(一共三个塔,一个是目标塔,还一个塔你占着,剩下的那个就是辅助塔)上
然后把他移动到目标塔。
我们就可以利用递归的思想来写代码
代码展示
static public void proces(int n,char start ,char help,char end){
if(n==1){//终止条件
move(start,end);
}else {
proces(n-1,start,end,help);
move(start,end);
proces(n-1,help,start,end);
}
}
static public void move(char B,char E){
System.out.println(B+"=====>"+E);
}
参考资料
https://www.bilibili.com/video/BV1rs411Y76X?share_source=copy_web