问题:
据说古代印度还是埃及有个塔叫做波罗教塔(汉诺塔),上面有三根钻石石柱(真TM有钱)。神说在第一根上面有小到大放上64个金色盘子,命令那些奴才们从第一根移动到第三根上面,搬运中必须遵守大盘在小盘下面的规矩。每天只能搬动一个,等全把盘子搬到第三个上面的时候,这个塔就崩了。。世界就灭亡了。。。让你求一求这个世界末日
这个是用递归,看网上的解释也很迷茫,自己思考了一下,大概是这么回事。第一根柱子A,第二根柱子B,第三根柱子C。A上面有N个盘子,这里先要借助B为过渡,把N-1个盘子移动到B上,再把第N个盘子移到C上去。然后以A为过渡,把N-2个盘子移到A上去,第N-1个移动到C上去,依次往下。。。。等N=1的时候,直接把盘子丢给C就好了。
代码如下:
package per.lihao.recursion;
/**
* Author: LiHao
* Time: 2018/12/5 15:34
*/
public class HanoiTower {
public static void move(int num,String from,String to){
System.out.println("move "+String.valueOf(num)+" from "+from+" to "+to);
}
public static int swap(int num,String a, String b,String c){
int count = 0;
if (num==1){
move(num,a,c);
}
else {
int n1 = swap(num-1,a,c,b);
move(num,a,c);
int n2 = swap(num-1,b,a,c);
count += n1+n2+1;
}
return count;
}
public static void main(String[] args) {
String A="A",B="B",C="C";
int num=3;
int p=swap(num,A,B,C);
System.out.println("final total num is :"+String.valueOf(p));
}
}
参考文献
1.汉诺塔C++版