Intereting Posts
проверка состояния палиндрома с использованием аргументов функции Преобразовать список, разделенный запятыми, в Unordered List Автоматическое добавление атрибутов ширины и высоты в теги <img> с помощью функции PHP Как создать динамические URL-адреса? Правильное соответствие URL IDN Как использовать PHP GD для создания 1 бит растровых изображений (только черный и белый, без серых) Строка PHP для многоуровневого массива Хранить переменные массива через страницу Обновить с помощью PHP Как использовать mysqli в WordPress Функция вызова Codeigniter в контроллере без index.php Как построить расширение PHP, которое выполняется во многих версиях PHP? Как я могу изменить содержимое div x (с ajax) автоматически при выполнении другого вызова ajax с изменением содержимого div y? javascript keep checkbox установлен после обновления страницы PHP DOM: разбор HTML-списка в массив? Каков наилучший способ хранения изображений пользователей с помощью PHP и MySQL?

Поиск следующего номера фибоначчи

Мне нужно найти (следующее) число фибоначчи, заданное целое число 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-й член последовательности.