河内塔输出
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
有人能告诉我为什么我在 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