Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 河内输出塔_Java_Recursion_Towers Of Hanoi - Fatal编程技术网

Java 河内输出塔

Java 河内输出塔,java,recursion,towers-of-hanoi,Java,Recursion,Towers Of Hanoi,有人能告诉我为什么当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

有人能告诉我为什么当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
方法之前都不会重置它,所以下次调用
solve
方法时,您的move方法不在初始阶段,即
0
因此您必须在每次调用
solve
方法之后重新初始化它

您的代码非常好。当您调用方法而不重置move变量时,问题就出现了

请点击此处:


取决于移动的初始值。对我来说工作正常。最初
move
应为
0
。或者,将
move
作为实例变量,并在每次需要解决的时候创建类的新实例。和以往一样,全局可变状态是一个不必要的缺点。@而且如果为true,则在
solve
方法在初始阶段获得
move
变量之前,任何东西都可以满足您的要求。我明白您的意思了。当我点击链接时,我并不完全确定我在寻找什么。它只是显示了我的代码,不幸的是,我仍然得到了4和11,即使我改为非静态variable@kprog现在检查我在每次呼叫前重置移动,您得到我现在看到的期望结果,谢谢,我已将您的回答标记为正确
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