汉诺塔题目要求:
解题思路:
1~N从A移动到B,C作为辅助
等价于:
1、1~N-1从A移动到C,B作为辅助
2、把N从A移动到B
3、1~N-1从C移动到B,A为辅助
算法实现:
1 package recursion; 2 3 /** 4 * @author zsh 5 * @company wlgzs 6 * @create 2019-02-16 8:53 7 * @Describe 汉诺塔 8 */ 9 public class TowerOfHanoi {10 11 /**12 * 将N个盘子从原始柱子移动到目标柱子的路径打印13 * @param N 初始的盘子大小,N为最大编号14 * @param from 原始柱子15 * @param to 目标柱子16 * @param help 辅助柱子17 * 解题思路:18 * 找重复:1到N-1个盘子移动到辅助空间,N移动到目标柱子。19 * 找变化量:N20 * 找出口:N == 121 */22 static void printHanoiTower(int N,String from,String to,String help){23 if (N == 1){24 System.out.println("move" + N +from+"to"+to);25 return;26 }27 //先把N-1个盘子挪到辅助空间上去28 printHanoiTower(N -1 ,from,help,to);29 //N可以顺利到达目标柱子30 System.out.println("move" + N +from+"to"+to);31 //让N-1个盘子回到源空间上去32 printHanoiTower(N-1,help,to,from);33 }34 35 public static void main(String[] args) {36 printHanoiTower(3,"A","B","C");37 }38 }