修改一下汉诺塔的游戏规则,现在不能直接从左边走到右边,也不能直接右边走到左边。
方法一:递归实现
现在分析一下,比如左边有1~n,那么移动最后一个的情况,就是:
1.1-n-1从左边移动到右边
2.n从左边移动到中间
3.1-n-1从右边移动到左边
4.n从中间移动到右边
5.1-n-1从左边移动到右边
那么,假如我有这样一个f(range,from,to)那么我需要求解的就是f(n,lrft,right),原子情况就是从只有一个数的时候,直接左边中间右边即可。
1 public static int process(int num, String from, String to) { 2 if (num == 1) { 3 System.out.println("move 1 from " + from +" to middle"); 4 System.out.println("move 1 from middle to " + to); 5 return 2; 6 } 7 else { 8 int p1 = process(num - 1, from, to); 9 System.out.println("move "+ num + " from " + from +" to middle"); 10 int p2 = process(num - 1, to, from); 11 System.out.println("move "+ num + " from middle to " + to); 12 int p3 = process(num - 1, from, to); 13 return p1 + p2 + p3 +2; 14 } 15 }