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

move是类级别的静态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方法。

您的代码非常好,在调用方法而不重置move变量时发生问题。

在这里检查: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

关于java - 汉诺塔输出,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44193991/

10-10 09:07