2017-05-26 64 views
1

有人可以告诉我为什么我不断得到4当n = 2和11当n = 3?我应该分别得到3分和7分,但是没有发生,也很令人沮丧。河内塔的输出

此举是一个类级别的静态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); 
} 
+0

要看什么招的初始值。 –

+0

为我正常工作。最初'移动'应该是'0'。 –

回答

3

问题是move是静态的变量,因为你不必在每次调用之前重置它,所以它是下一次,当你调用solve方法,您的移动方法不在初始阶段,即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 
+0

或者,让'移动'一个实例变量,并在每次想要解决的时候创建一个类的新实例。和以往一样,全球可变状态是一种不必要的罪恶。 –

+0

@AndyTurner真正的任何东西都能满足,直到'solve'方法在初始阶段获得'move'变量 –

+0

好吧,我明白你在说什么了。当我点击链接时,我不完全确定我在找什么。它只是显示我的代码,我仍然得到4和11,不幸的是,即使我改变到一个非静态变量 – kprog