/*
* 递归之汉诺塔问题
* 汉诺塔问题是有三个柱子,分别是A,B,C然后有N个飞碟在柱子A上,需要将A的飞碟全部移动到C上,并且A柱子上的飞碟从高到低依次变大,
* 移动的过程中,大的飞碟不能放在小的飞碟的上面。
*
* 问题的解题思路:首先有N个飞碟,想要把A柱子中的飞碟移动到C上,那么必须先将N-1个飞碟先移动到B上,然后在把N-1个飞碟由B移动到A上
* 由此可以得到数学公式f(N) = f(N-1) + 1 + f(N-1); (N>1) 第一个是f(N-1)是将飞碟由A->B的过程,1是将N号飞碟由A移动到C
* 第二个f(N-1)表示将飞碟由B->C的过程
*
* 代码示例如下
*/
public class RecursionHanoiOfTower {
public static void main(String[] args) {
// TODO Auto-generated method stub
move(3, "A","C","B");
}
private static void move(int n, String from, String to, String temp){
if(n==1){
System.out.println("把"+n+"号飞碟从:"+from+"移动到:"+to);
}else{
move(n-1, from, temp, to);
System.out.println("把"+n+"号飞碟从:"+from+"移动到:"+to);
move(n-1, temp, to, from);
}
}
}
//执行结果如下:
把1号飞碟从:A移动到:C
把2号飞碟从:A移动到:B
把1号飞碟从:C移动到:B
把3号飞碟从:A移动到:C
把1号飞碟从:B移动到:A
把2号飞碟从:B移动到:C
把1号飞碟从:A移动到:C