java - 汉诺塔输出

标签 java recursion towers-of-hanoi

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

move 是类级别的静态整型变量

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

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

相关文章:

java - greenDAO 只能在 Android 上使用吗?

java - 使用 Spring security oauth,使用自定义 OAuth 提供程序,我得到 [authorization_request_not_found],我应该自己处理回调方法吗?

java - 如何使用 Channel BufferOutputStream 检查压缩大小

python - 带 yield 的递归函数不返回任何东西

performance - 这种解决开放难题的方法正确吗?

java - Swing:将帮助 [?] 按钮添加到窗口标题栏

c++ - 递归和函数调用

python - 理解Python中的递归和堆栈

haskell - TCO 在 Clojure 中优化了汉诺塔

c++ - 计数汉诺塔中的函数调用?