汉诺塔 --java实现-递归的应用场景
***一切解释尽在代码中,尽情享受吧
public class TestHanoi {
public static void main(String[] args) {
System.out.println("A B C");
System.out.println("汉诺塔的移动顺序:");
hanoi(2,'A', 'B', 'C');
}
/*
* n 代表共有N个盘子
* from 开始的柱子
* middle 中间的柱子
* to 目标柱子
* 规则:n=1时,就是直接从from 到to
* n>=2时,都认为只有两个,上面的所有盘子和下面一个盘子
*/
public static void hanoi(int n,char from,char middle,char to) {
//n=1
if(n==1) {
System.out.println("第1个盘子从"+from+"移到"+to);
//n>=2
}else {
//移动上面的所有盘子到中间位置
//因为想要将上面所有的盘子移到中间来,所以middle参数就与参数to调换位置
hanoi(n-1, from, to, middle);
//移动下面的盘子
System.out.println("第"+n+"个盘子从"+from+"移到"+to);
//把上面的所有盘子从中间的位置移到目标位置
hanoi(n-1, middle, from, to);
}
}
}