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));
}
Run Code Online (Sandbox Code Playgroud)
在解决Project Euler Problem 14时,我遇到了一个奇怪的问题,在java中我从未遇到过的方法返回.在上述方法中,当数字最终为1时,它应返回链的计数.但这是输入13的输出.
13号链长1
40号链长2
20号链长3
10号链长4
5号链长5
16号链长6
8号链长7
4号链长8
2号链长9
1号链长10
数字最终是1个返回链长
这不应该被执行
这不应该被执行
-1
问题出现在最后一部分,当数字变为1而不是返回chainlength = 10时,它会以某种方式跳过它并执行永远不应执行的代码并返回-1.对于像1,2,4,8这样的2的所有权力,它运行良好,但对其他人来说则失败.
这对我来说可能是一个愚蠢的错误.尽管如此,对我来说这是一个问题.
我没有仔细看过,但我怀疑这个:
else {
chainLength++;
findChainLength(number*3+1);
}
Run Code Online (Sandbox Code Playgroud)
应该是:
else {
chainLength++;
return findChainLength(number*3+1);
}
Run Code Online (Sandbox Code Playgroud)
然后,您应该能够完全删除该方法的最后两行,因为它们无法访问.