php 兩種方式實現求 斐波那契數 遞迴,遞推

2021-08-19 19:21:10 字數 1331 閱讀 9606

斐波那契數,亦稱之為斐波那契數列(義大利語: successione di fibonacci),又稱**分割數列、費波那西數列、費波拿契數、費氏數列,指的是這樣乙個數列:1、1、2、3、5、8、13、21、……在數學上,斐波那契數列以如下被以遞迴的方法定義:f

0=0,f

1=1,fn=f

n-1+f

n-2(n>=2,n∈n*),用文字來說,就是斐波那契數列列由 0 和 1 開始,之後的斐波那契數列係數就由之前的兩數相加。

1 使用遞迴方法。  順著思路去想, f(1)= 1; f(2) = 1 ; f(3) = f(2)+f(1)    f(4) = f(3)+f(2) 3

//使用遞迴方式求斐波那契數

public function fb($n)else

}

2使用遞推方法。

public function fb2($n)

$t1 = 1;$t2 = 1;

for($i=3;$i<$n;$i++)

return $t1 + $t2;

}

最後,進行效能分析。

明顯的可以**,遞迴方法,每多一層,就要向下遞迴兩次。 約為 o(2 的n次方)  而遞推演算法為  o(n),實測**如下。

/**效能測試。*/

function bench_profile($starttime , $flag = '')

//使用遞迴演算法。

ini_set("max_execution_time" ,3600);

$s = explode(' ',microtime());

echo bench_profile($s )."

"; echo fb(35); //使用遞迴 耗時 40.925 sec 每往上乙個數約慢兩倍

echo bench_profile($s )."

";//使用遞推演算法。

$s = explode(' ',microtime());

echo bench_profile($s )."

"; echo fb2(35); //使用遞推 時間極短。

echo bench_profile($s )."

";

總結:

使用遞迴演算法,到求第100 個

斐波那契數

時會卡到機器跑不動,而使用遞推演算法,幾乎不費時間。 

演算法複雜度是非常重要的概念,也是區分程式設計師的一把好尺子。

斐波那契數列 的兩種實現方式

一 先要回答乙個問題 什麼是婓波那契數列?答案在這裡 二 看 1 第一方法 遞迴實現 public static void main string args public static int fibonacci int i else if i 1 return fibonacci i 2 fibo...

迴圈斐波那契數列 斐波那契數列的兩種實現

最先研究這個數列的人是義大利人斐波那契,leonardo fibonacci,他在描述兔子生長的數目時用上了這數列 每個月兔子的總對數,就是這樣乙個序列 1,1,2,3,5,8,13,21.這個序列從第三項開始,每一項都等於前兩項之和。在數學上,斐波那契數列是以遞迴的方法來定義 f 1 1 f 2 ...

斐波那契數列的兩種優化

遞迴存在許多子問題的重複計算問題,時間複雜度較高。public class fbsl public static intfb int n 首先我們需要乙個全域性的雜湊表來儲存當你第n個數所對應的前兩個數的和。class fb 一旦發現我曾經計算過我就不再遞迴計算,直接返回map集合存的值 if ma...