Я пытаюсь сделать простой цикл, используя класс, чтобы получить факториал числа. Однако по какой-то причине цикл while возвращает значение только после однократного запуска.
Вот мой код:
<?php
class Factorial {
public function calculate($int){
$intStep = $int-1;
do {
$int*=$intStep;
$int--;
return $int;
} while($int>0);
if (!is_int($int)){
echo "entry is not a number";
}
}
}
$factorial = new Factorial;
echo $factorial->calculate(5);
Я вижу ряд проблем с вашим кодом:
return $int;
запускается внутри цикла do while, что означает, что он будет выполняться только один раз.$int
вместо $intStep
$int
ниже нуля вместо $intStep
Вот ваш код с исправлением всех этих проблем, он работает и возвращает 15:
class Factorial {
public function calculate ($int) {
if (!is_int($int)) {
echo "entry is not a number";
}
$intStep = $int - 1;
do {
$int += $intStep;
$intStep--;
} while ($intStep > 0);
return $int;
}
}
$factorial = new Factorial;
echo $factorial->calculate(5);
Вы не должны возвращаться из своей функции, пока ваш результат не будет готов. Поскольку вы вернетесь рано, вы не закончите свой расчет.
В общем, ваша жизнь станет проще, если вы научитесь отлаживать. Для PHP проще всего было бы echo
вещи во всем вашем коде. Если вы положите echo $int
внутри вашего цикла было бы более очевидно для вас, в чем проблема.
попробуй это
<?php
class Factorial {
public function calculate($num){
$Factorial = 1;
$i =1;
do{
$Factorial *= $i;
$i++;
}while($i<=$num);
return $Factorial;
}
}
$factorial = new Factorial;
echo $factorial->calculate(5);
?>
Факториал? Может быть, вам нужен следующий код:
Не забывайте отрицательные числа.
class Factorial {
public function calculate ($int) {
if (!is_int($int)) {
echo "entry is not a number";
}
if ($int == 0 || $int == 1) {
$result = 1;
} else if ($int < 0) {
$result = $this->calculate($int + 1) * $int;
} else {
$result = $this->calculate($int - 1) * $int;
}
return $result;
}
}
$factorial = new Factorial;
echo $factorial->calculate(-4);