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 № 1Você 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).