Java 河内输出塔
有人能告诉我为什么当n=2时我总是得到4,当n=3时我总是得到11?我应该分别得到3分和7分,但这并没有发生,而且非常令人沮丧 move是类级别的静态int变量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
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