递归--HannoiTower(汉诺塔)--Java

版权声明: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

猜你喜欢

转载自blog.csdn.net/weixin_43584220/article/details/88829333