n факториальная проблема с большим количеством

Я написал следующий код для поиска! Я запускаю это через CLI.

<?php
$handle = fopen("php://stdin", "r");
$number = (int) trim(fgets($handle));
$fact = calcFactorial($number);
echo $fact . "\n";

function calcFactorial($number) {
if ($number < 2) {
return 1;
} else {
return $number * calcFactorial($number - 1);
}
}
fclose($handle);
?>

Приведенный выше код работает нормально. Но есть две проблемы с двумя различными установками PHP.

  1. На одном ПК я получаю,

Неустранимая ошибка: достигнут максимальный уровень вложенности функции «100»,
прерывание!

Чтобы исправить вышеуказанную проблему, я нахожу решение Вот. Это правильный способ найти решение? Потому что это зависит от конкретного значения по умолчанию «xdebug.max_nesting_level».

  1. На другом ПК я получаю,

INF

Так каков наилучший подход к решению этой проблемы?

Постскриптум: Я прошел через различные решения на этом сайте, но я не могу сделать вывод.

ОБНОВИТЬ: Есть один функция предложил. Но можно ли это сделать без использования какой-либо функции?

3

Решение

Предел вложенности:

если calcFactorial () может быть нерекурсивным, то вы можете изменить его на это:

function calcFactorial($number){

if($number<2){
return 1;
}

$ret = 1;
for($i=2;$i<=$number;$i++){
$ret = $ret*$i;
}
return $ret;
}

если он должен быть рекурсивным, вы никогда не сможете вычислить факториал числа, превышающего максимальный уровень вложенности функций.

INF:

Это означает, что PHP думает, что число бесконечно (слишком велико, чтобы хранить в памяти) … я думаю (не уверен), что ответ больше, чем PHP_INT_MAX …

Вы можете подтвердить это с помощью echo is_infinite ($ number);

Вы можете попытаться решить эту проблему с помощью сохранения чисел в виде строк (из цифр) или массивов (из цифр), а затем написать некоторую функцию для умножения этих строк (массивов), но это не так просто сделать

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]