汉诺塔
**移动次数为:2^n - 1
算法分析
(1) 把n-1个盘子由A 移到 B;
(2) 把第n个盘子由 A移到 C;
(3) 把n-1个盘子由B 移到 C;
从这里入手,在加上上面数学问题解法的分析,我们不难发现,移到的步数必定为奇数步:
(1)中间的一步是把最大的一个盘子由A移到C上去;
(2)中间一步之上可以看成把A上n-1个盘子通过借助辅助塔(C塔)移到了B上,
(3)中间一步之下可以看成把B上n-1个盘子通过借助辅助塔(A塔)移到了C上;
**
public class 汉诺塔 {
public static void main(String[] args) {
f(2,"A", "B", "C");
}
static void f(int n,String a,String b,String c) {
if(n == 1) {
System.out.println((n+":"+a+"-->"+c));
}
else {
f(n-1, a,c,b);
System.out.println((n-1+":"+a+"-->"+c));
f(n-1, b, a, c);
}
}
}