Как вычислить факториал
Короткий ответ
Перемножьте числа от 1 до N:
<?php
echo array_product(range(1, 5));Результат:
120Циклом
Функция с проверкой аргумента:
<?php
function factorial(int $n): int
{
if ($n < 0) {
throw new InvalidArgumentException('The number must not be negative');
}
$result = 1;
for ($i = 2; $i <= $n; $i++) {
$result *= $i;
}
return $result;
}
echo factorial(0), ' ', factorial(10);Результат:
1 3628800Большие числа
Факториал растёт очень быстро и скоро перестаёт помещаться в целое число: на 64-битных системах — после 20, на 32-битных — уже после 12. При переполнении результат становится дробным и теряет точность:
<?php
var_dump(is_int(array_product(range(1, 12))));
var_dump(is_int(array_product(range(1, 25))));Результат:
bool(true)
bool(false)Функции из этого ответа
- array_product — Перемножает элементы массива.
- range — Создаёт массив с последовательностью значений.
- is_float — Проверяет, является ли значение дробным числом.