Ваша функция действительно сложна.
Рассмотрим скорее эту реализацию:
int ft_iterative_factorial(int nb)
{
int res = 1;
for (int i = 2; i <= nb; i++)
{
res = res * i;
}
return res;
}
Ваш тест return ( nb < 0 ? 0 : res);
не имеет особого смысла после цикла, вы должны сделать это доцикл, и при этом if (nb == 1 || nb == 0)
внутри цикла.Но в любом случае эти тесты бессмысленны в моем коде.
int
, вероятно, является 32-битным типом, а 32-битного недостаточно для хранения 16!.
Либо используйте long long
(обычно 64бит) вместо int
(но тогда вы будете ограничены 21 или около того), или обрабатывать случаи, когда значение> 16 в противном случае.
Кстати: если вы действительно хотите быть быстрым, не вычислить факториал, но использовать справочную таблицу , это оставлено читателю в качестве упражнения.