我正在研究项目欧拉问题14:https://projecteuler.net/problem=14
我尝试了一个测试用例:这是我的代码:
public class problem015 {
public static void main(String[] args) {
System.out.println(Collatz(13));
}
public static int Collatz (int n){
int sum = 1;
if (n == 1)
return sum;
if (n%2 == 0) {
sum ++;
return Collatz(n/2);
}
if (n%2 == 1){
sum ++;
return Collatz(1 + (3*n));
}
else return 0;
}
}
理论上,当我使用数字13(Collatz序列中的10个数字,请参见链接)进行测试时,这应该返回值10。但是,它只返回我分配给整数' sum'的初始值。
任何想法为什么?
编辑:我认为这是因为每次循环回到Collatz功能时,它会重置' sum'的值。如果是这种情况,我该如何声明' sum'的值。独立地?答案 0 :(得分:4)
您不需要sum
。
public static int Collatz (int n){
if (n == 1)
return 1;
if (n%2 == 0) {
return 1 + Collatz(n/2);
}else{
return 1 + Collatz(1 + (3*n));
}
}
答案 1 :(得分:1)
当你进行递归调用时,你从不传入" sum",所以它不会增加。
您希望您的基本案例(n == 1)返回1.其他每个案例都应返回1 + Collatz(nextNumberInTheSequence)。