цикл do-while запускается только один раз

Я пытаюсь сделать простой цикл, используя класс, чтобы получить факториал числа. Однако по какой-то причине цикл 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);

0

Решение

Я вижу ряд проблем с вашим кодом:

  1. return $int; запускается внутри цикла do while, что означает, что он будет выполняться только один раз.
  2. Вы уменьшаете $int вместо $intStep
  3. Вы проверяете, если $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);

3v4l.org демо

4

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

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

В общем, ваша жизнь станет проще, если вы научитесь отлаживать. Для PHP проще всего было бы echo вещи во всем вашем коде. Если вы положите echo $int внутри вашего цикла было бы более очевидно для вас, в чем проблема.

0

попробуй это

 <?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);
?>
0

Факториал? Может быть, вам нужен следующий код:

Не забывайте отрицательные числа.

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);
0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector