Olá, tenho o seguinte código abaixo para resolver a série de fibonacci um pouco mais complexa:
public static int f(int n) {
if (n <= 3) {
return n;
} else if (n % 2 != 0) {
return f(n - 1) + f(n - 2);
} else {
return f(n - 1) + (n - 2) + f(n - 3);
}
}
Para f(40) está me retornando -1970444362, alguém poderia me auxiliar? Qual o problema? E como faço para resolver?
f(37) = 387420489
f(38) = 774840978
f(39) = 1162261467
f(40) = -1970444362
isso é simples kra, é porque você está usando int, e o comprimento ja ultrapassou o que int suporta,
tente usar um Long ao invés de int, e veja o resultado.
um abraço
class teste {
public static void main(String[]args) {
int a;
a = f(50);
System.out.println(a);
}
public static int f(int n) {
if (n <= 3) {
return n;
} else if (n % 2 != 0) {
return f(n - 1) + f(n - 2);
} else {
return f(n - 1) + (n - 2) + f(n - 3);
}
}
}
Resultado : 183586786
??? Aqui funciona!
Mas caso precise de mais “espaço” na variavel… armazenar um numero maior por exemplo. Utilize tipos de dados maiores.
Ou… biginteger ( se nao me engano é assim ), para voce resolver problemas com numeração infinita… oque vai depender somente da memoria do seu pc.
Espero ter ajudado.
Flw