Encodera

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.

Как вычислить факториал

Короткий ответ

Перемножьте числа от 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 — Проверяет, является ли значение дробным числом.

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.