Я собираюсь действовать при условии, что это домашняя работа, если я ошибаюсь, я вернусь и отредактирую этот пост или репост.
Во-первых, вы должны попытаться написать свою факториальную функцию в хвостовой рекурсивной манере. Хотя это, вероятно, не будет иметь большого значения в C, это хорошая практика.
int helper( int x, int acc ) {
if( x == 0 ) {
return acc;
}
else {
return helper( x - 1, acc * x );
}
}
int factorial( x ) {
helper( x, 1 );
}
Далее, вы, как правило, не хотите помещать цикл в свои рекурсивные функции, что несколько отрицательно сказывается на этом. Подумайте о рекурсивном вызове как об одной итерации с тестом, и вы можете либо вернуться, либо вспомнить.