Проблема
Ошибка в строке
return fact_i(curNumber - 1, sum);
Это должно быть:
return curNumber*fact_i(curNumber - 1, sum);
Без этого результат никогда не будет накапливаться.Вы просто продолжаете 1
вверх по цепочке рекурсивных вызовов.
Дальнейшая очистка
Вы используете два условия завершения - одно, если fact
, и другое в fact_i
.Вы можете использовать только одно завершающее условие для упрощения кода.
int fact_i(int curNumber, int sum) {
if(curNumber == 1) {
return sum;
}
// No need for an else here.
return fact_i(curNumber - 1, (curNumber-1)*sum);
}
int fact(int number) {
return fact_i(number, number);
}