как заставить фибоначчи остановиться на последнем входном числе в php

#php #loops #fibonacci

Вопрос:

У меня есть этот вход и выход:

Вход : 3
Выход : 1 1 2 3

Вход : 5
Выход : 1 1 2 3 5

Вход : 12
Выход : 1 1 2 3 5 8

Вход : 25
Выход : 1 1 2 3 5 8 13 21

Я попытался подвести итоги, используя этот код:

 <?php
  function fibonaci($total)
        {
            $previousNum=1;
            $numbersNow=1;

            $valueOutput = "$previousNum $numbersNow";

            for ($i=1; $i<$total; $i  )
            {
              $output = $numbersNow   $previousNum;
              $valueOutput = $valueOutput . " $output";

              $previousNum = $numbersNow;
              $numbersNow = $output;
            }
            return $valueOutput;
        }

        echo fibonaci(3);
        echo "<br>";

        echo fibonaci(5);
        echo "<br>";

        echo fibonaci(12);
        echo "<br>";

        echo fibonaci(25);
        echo "<br>";
?>
 

Какие результаты:
1 1 2 3
1 1 2 3 5 8
1 1 2 3 5 8 13 21 34 55 89 144 233
1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181 6765 10946 17711 28657 46368 75025 121393

Комментарии:

1. Вы не определили общую сумму для ($i=1; $i

2. @Grumpy $total -это аргумент функции.

3. Ваше for условие цикла должно сравнить число с выводом , и $total в данный момент оно выводит $total итерации.

Ответ №1:

Я бы переписал ваш код следующим образом:

 function fibonaci($total)
{
    $previousNum=1;
    $numbersNow=1;

    $valueOutput = "$previousNum $numbersNow";

    while (true)
    {
      $output = $numbersNow   $previousNum;

      // break the loop if next number is greater than $total
      if ($output > $total) {
          break;
      }

      $valueOutput = $valueOutput . " $output";

      $previousNum = $numbersNow;
      $numbersNow = $output;
    }
    return $valueOutput;
}
 

Поиграй здесь.