Мне нужно найти (следующее) число фибоначчи, заданное целое число N. Итак, допустим, что у меня n = 13, и мне нужно вывести следующий номер фибоначчи, который равен 21, но как это сделать? Как я могу найти предыдущий номер, который суммируется для его формирования?
Я имею в виду, что я мог бы легко создать цикл for / while, который возвращает последовательность фибоначчи, но как я могу найти следующий номер, получив предыдущий.
<?php $n = 13; while($n < 1000) { $n = $x + $y; echo($n."<br />"); $x = $y; $y = $n; } ?>
Используя цикл, вы можете сохранить значения в массиве, который сразу может остановить один ключ после нахождения выбранного номера в предыдущем значении ключа.
function getFib($n) { $fib = array($n+1); // array to num + 1 $fib[0] = 0; $fib[1] = 1; // set initial array keys $i; for ($i=2;$i<=$n+1;$i++) { $fib[$i] = $fib[$i-1]+$fib[$i-2]; if ($fib[$i] > $n) { // check if key > num return $fib[$i]; } } if ($fib[$i-1] < $n) { // check if key < num return $fib[$i-1] + $n; } if ($fib[$i] = $n-1) { // check if key = num return $fib[$i-1] + $fib[$i-2]; } if ($fib[$i-1] = 1) { // check if num = 1 return $n + $n; } } $num = 13; echo "next fibonacci number = " . getFib($num);
Обратите внимание, что я не тестировал это, и код мог быть оптимизирован, поэтому, прежде чем downvoting считают, что это служит только концепцией заданного вопроса.
Вы можете использовать Формулу Бине :
n -n F(n) = phi - (-phi) --------------- sqrt(5)
где phi – золотое соотношение (( 1 + sqrt(5) ) / 2) ~= 1.61803...
Это позволяет точно определить n-й член последовательности.