修改一下汉诺塔的游戏规则,现在不能直接从左边走到右边,也不能直接右边走到左边。

方法一:递归实现

现在分析一下,比如左边有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     }
View Code

相关文章: