Método recursivo de Java para encontrar resultados factoriales de salida negativa [duplicado]

Esta pregunta ya tiene una respuesta aquí:

Método factorial recursivo que devuelve algunos números negativos 1 respuesta

Sé que es desbordamiento, pero la cosa es que 20 es un número relativamente pequeño, esto no debería suceder, ¿verdad? ¿Existe un mejor enfoque para encontrar factorial de grandes números como 1000 sin obtener este resultado extraño?

public class RecursiveFunctionsExamples {

public int factorial(Integer n)
{
    Integer res;
    if(n == 0){ 
        res = 1;
    }else{
       res =  n * factorial(n-1);
    }

    return res;
}


public static void main(String[] args) {
    System.out.println(new RecursiveFunctionsExamples().factorial(20));
}
}

Respuestas a la pregunta(2)

Su respuesta a la pregunta