版权声明:071623 https://blog.csdn.net/weixin_43584220/article/details/88829333
package cn.Algorithm.Ravanla;
public class HannoiTower {
public static void main(String[] args) {
int n = 2;
hannoi(n, "A", "B", "C");
}
static void hannoi(int n, String A, String B, String C) {
if(n == 1) {
System.out.println("把第"+n+"个盘子从"+A+"移到"+C);
}
if(n== 2) {
hannoi(n - 1, A, C, B);
System.out.println("把第"+n+"个盘子从"+A+"移到"+C);
hannoi(n - 1, B, A, C);
}
}
}
如果把盘子看成只有两个,仔细想想要怎样去放这两个盘子
package cn.Algorithm.Ravanla;
public class HannoiTower {
public static void main(String[] args) {
int n = 3;
hannoi(n, "A", "B", "C");
}
static void hannoi(int n, String A, String B, String C) {
if(n == 1) {
System.out.println("把第"+n+"个盘子从"+A+"移到"+C);
}
else {
hannoi(n - 1, A, C, B);
System.out.println("把第"+n+"个盘子从"+A+"移到"+C);
hannoi(n - 1, B, A, C);
}
}
}
如果把盘子看成两个以上,仔细想想要怎样去放这些盘子
如果自己真的老老实实的去摆过有5个盘子的hannoitower(或者更多),会发些摆多了以后像是在重复某些步骤
仔细去想想,原来我们一直在重复摆只有两个盘子的hannoitower的步骤
所以我们的递归可以改动一下就可以求其他盘数的hannoitower