河内塔输出

tower of hanoi output

有人能告诉我为什么我在 n=2 时总是得到 4,而在 n=3 时总是得到 11 吗?我应该分别得到 3 和 7,但它没有发生并且非常令人沮丧。

move 是一个 class 级别的 static int 变量

public String solve(int n, String start, String middle, String end) {

     if (n == 1) {
        move++;
        return Integer.toString(move);
     }

     solve(n - 1, start, end, middle);
     move++;
     return solve(n - 1, middle, start, end);
} 

问题是 move 是静态变量,因为您没有在每次调用前重置它,所以它是下次您调用 solve 方法时,您的 move 方法不在初始阶段,即 0 因此你必须在每次调用 solve 方法后重新初始化它。

您的代码完全没问题,当您在调用方法时未重置移动变量时出现问题。

在这里查看:https://ideone.com/NoFJ8y

Success time: 0.05 memory: 4386816 signal:0
3 --> When called solve with n=2

Success time: 0.04 memory: 4386816 signal:0
7 --> When called solve with n=3

Success time: 0.04 memory: 4386816 signal:0
3 --> When called solve 3 times  with n=2 then 3 then 4
10
25