Ajuda em serie de Fibonacci

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