/ / Incremento de soma dentro de static static int não está funcionando - java, increment

Incremento de soma dentro int estática int não funciona - java, incremento

Eu estava trabalhando no problema do projeto Euler 14: https://projecteuler.net/problem=14

Eu tentei um caso de teste: Aqui está o meu código:

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;
}

}

Teoricamente, isso deve retornar um valor de 10quando eu testei com o número 13 (10 números na sequência Collatz, veja o link). No entanto, apenas retorna o valor inicial que atribuo ao número inteiro "sum".

Alguma idéia por quê?

EDIT: Eu acho que é porque toda vez que volta à função Collatz, redefine o valor de "sum". Se este for o caso, como declarar o valor de "sum" independentemente?

Respostas:

4 para resposta № 1

Você não precisa 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 para resposta № 2

Quando você faz a chamada recursiva, nunca passa em "soma", para que ela não seja incrementada.

Você deseja que seu caso base (n == 1) retorne 1. Cada um dos outros casos deve retornar 1 + Collatz (nextNumberInTheSequence).