寻找下一个斐波纳契数

时间:2014-06-17 15:37:07

标签: php fibonacci

我需要找到一个给定整数N的(下一个)斐波纳契数。所以假设我有n = 13并且我需要输出下一个斐波纳契数21,但我该怎么做?如何找到以前编号形成的数字?

我的意思是我可以很容易地想出一个返回斐波那契序列的for / while循环,但是如何通过给出前一个数字来找到下一个数字。

<?php

$n = 13;

while($n < 1000) {

    $n = $x + $y; 
    echo($n."<br />"); 
    $x = $y;
    $y = $n;
}
?>

3 个答案:

答案 0 :(得分:4)

您可以使用Binet's Formula

          n          -n
F(n) = phi   - (-phi)
       ---------------
          sqrt(5)

其中phi是黄金比例(( 1 + sqrt(5) ) / 2) ~= 1.61803...

这使您可以确切地确定序列的第n个项。

答案 1 :(得分:2)

使用循环可以将值存储在一个数组中,该数组可以在找到上一个键值中的选定数字后立即停止一个键。

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之前,请考虑这仅仅是问题的概念。

答案 2 :(得分:0)

您可以一步完成此操作:

phi = (1+sqrt(5))/2

next = round(current*phi)

round是一个返回最接近整数的函数;基本上等同于floor(x+0.5)

例如,如果您当前的电话号码是1313 * phi = 21.034441853748632,则四舍五入到21