2014-06-17 68 views
4

我需要找到一個給定整數N的(下一個)斐波那契數。所以我們假設我有n = 13,並且需要輸出下一個斐波那契數爲21,但是我該怎麼做?我怎樣才能找到前面總結出來的數字呢?尋找下一個斐波納契數

我的意思是我可以很容易地想出一個返回斐波那契數列的for/while循環,但是如何通過給定前一個數字來找到下一個數字。

<?php 

$n = 13; 

while($n < 1000) { 

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

爲什麼不創建一個循環,繼續進行一次迭代比獲取輸入總和還要多?這可能不是最有效的方法,但它是一種方式。 –

+0

難道它是關於你得到的術語中的兩個數字的比例嗎?這些數字的比例趨向於1.618。那麼計算出這兩個整數必須是相當容易的嗎?將給定的術語除以1.618以獲得其中一個數字的想法? –

回答

1

使用循環可以將值存儲在一個數組中,該數組可以在找到之前鍵值中選定的數字後立即停止一個鍵。

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認爲這只是作爲一個概念來問的問題。

+0

這個作品完全乾淨。謝謝你的時間:) –

+0

不客氣,很高興它幫助。如果你想進一步推進它,你可以確定'$ num'是否也是一個斐波那契數。下面是一個工作示例:http://ideone.com/vr5bJH –

+0

是的,我之後寫了類似的東西。無論如何,我還有一個簡單的問題。我如何獲得序列的前N個成員?到目前爲止,我只是想到了這一點:http://pastebin.com/qHvjUzdC 但是,通過這種方式,我只輸出從3開始的數字,並且我還需要從0,1,1和2開始斐波納契系列。 –

4

您可以使用Binet's Formula

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

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

這使您可以準確地確定該序列的第n個項。

+0

我該如何在PHP中實現這個功能? –

+0

但是這無法幫助找到最接近給定數字的斐波那契數 – hindmost

+0

@firstmost您可以使用該公式爲'F(n)= 13'找到'n',然後再次使用它來計算n-1。 – Jim