Для каждой рекурсивной функции вам необходимо написать базовый случай, иначе она в конечном итоге выполнит рекурсию, и в конце это вызовет ошибку переполнения стека (не имя этого сайта, это ошибка), чтовы пропускаете прямо в своем алгоритме.
Для рекурсивного поиска факториала
Математически
n!= nx (n - 1)! , а базовый вариант равен 0!= 1
На Java
// somewhere in your class
int factorial(int n) {
// base case
if (n == 0) return 1;
// recursion
return n * factorial(n-1);
}