// from 是移动过程中,当前碟所在的柱子
// to 是移动过程中,当前碟所要到达的柱子
// dependOn 是另外一根柱子
public class Hanoi {
public void haNoi(int n,char from,char dependOn,char to) {
if(n == 1) {
move(n,from,to);
}else {
haNoi(n-1, from, to, dependOn);
move(n,from,to);
haNoi(n-1, dependOn, from, to);
}
}
/**
* 递归思想
* A B C三个柱子
*
* 先假如前面n-1是已经完成的,那么前n-1个的动作是递归式地从from通过to移动到dependOn
* 然后再将第n个从from移动到to
* 再将前面的n-1个递归式地从dependOn通过from移动到to
*
*/
public void haNoi2(int n,char from,char dependOn,char to) {
if(n>0) {
haNoi2(n-1, from, to, dependOn);
move(n,from,to);
haNoi2(n-1, dependOn, from, to);
}
}
private void move(int i, char from, char to) {
System.out.println("第"+i+"个盘子从"+from+"------>"+to);
}
public static void main(String[] args) {
int n = 36;
Hanoi hanoi = new Hanoi();
hanoi.haNoi(n, 'A', 'B', 'C');
System.out.println("--------");
// hanoi.haNoi2(n, 'A', 'B', 'C');
}
}