public class EulerProblem14 {
int chainLength=1;
public int findChainLength(int number){
System.out.println("number "+number);
System.out.println("Chainlength "+chainLength);
if(number==1){
System.out.println("the number is finally 1 return chain length");
return chainLength;
}
if(number%2==0){
chainLength++;
return findChainLength(number/2);
}
else {
chainLength++;
findChainLength(number*3+1);
}
System.out.println("THIS SHOULD NOT BE EXECUTED");
return -1;
}
public static void main(String args[]){
System.out.println(new EulerProblem14().findChainLength(13));
}
解决欧拉计划时Problem 14 ,我在java中的方法返回中遇到了一个以前从未遇到过的奇怪问题。在上面的方法中,当数字最终为 1 时,它应该返回链的计数。但这是输入 13 的输出。
number 13 Chainlength 1
number 40 Chainlength 2
number 20 Chainlength 3
number 10 Chainlength 4
number 5 Chainlength 5
number 16 Chainlength 6
number 8 Chainlength 7
number 4 Chainlength 8
number 2 Chainlength 9
number 1 Chainlength 10
the number is finally 1 return chain length
THIS SHOULD NOT BE EXECUTED
THIS SHOULD NOT BE EXECUTED
-1
问题出在最后一部分,当数字变为 1 而不是返回 chainlength = 10 时,它会以某种方式跳过它并执行不应该执行的代码并返回 -1 。它对于 2 的所有幂(如 1、2、4、8)运行良好,但对于其他的则失败。
这对我来说可能是一个愚蠢的错误。尽管如此,这对我来说是一个问题。
最佳答案
我没有详细查看,但我怀疑这一点:
else {
chainLength++;
findChainLength(number*3+1);
}
实际上应该是:
else {
chainLength++;
return findChainLength(number*3+1);
}
然后您应该能够完全删除该方法的最后两行,因为它们无法访问。
关于Java : Method return,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10209532/