public static int中的sum增量不起作用

时间:2015-12-22 18:44:34

标签: java increment

我正在研究项目欧拉问题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(Collat​​z序列中的10个数字,请参见链接)进行测试时,这应该返回值10。但是,它只返回我分配给整数' sum'的初始值。

任何想法为什么?

编辑:我认为这是因为每次循环回到Collat​​z功能时,它会重置' sum'的值。如果是这种情况,我该如何声明' sum'的值。独立地?

2 个答案:

答案 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 + Collat​​z(nextNumberInTheSequence)。