Если вы проверите Java Integer, его максимальные и минимальные значения будут следующими:
int MAX_VALUE = 2147483647
int MIN_VALUE = -2147483648
Если вы выполните некоторые математические вычисления, вы увидите, что (Факториал 13) 1932053504 * 14
равен 27048749056
который находится за пределами int MAX_VALUE , и поэтому вы получаете неправильный результат для Factorial of 14. Таким образом, чтобы иметь хорошие результаты, лучше использовать тип long
.