無意間看到一道題:
編寫乙個計算前100位斐波那契數的函式。根據定義,斐波那契序列的前兩位數字是0和1,隨後的每個數字是前兩個數字的和。例如,前10位斐波那契數為:0,1,1,2,3,5,8,13,21,34。我一看這不是熟悉的斐波那契數列嘛,簡單!乙個遞迴搞定,就沒重視了。然後晚上自己嘗試寫著玩,卻發現原來自己智力被爆。
首先寫了個這樣的程式:
public class fibonnaccia
public static int count(int t)else if(t==1)else if(t>1)else
}}
嘗試跑了下數列的前幾位,沒問題,然後跑100,誒?怎麼跑不出結果?原來還是複雜度的鍋。斐波那契數列的遞迴演算法複雜度是o(n!),多麼可怕。
然後將程式更改修正後,如下:
public class fibonnaccib
public static long count(long t)else if(t==1l)else if(t<0l)
long temp1 = 0l;
long temp2 = 1l;
long temp = 0l;
for(long i=0l; i
注意到int已經裝不下結果了,這裡用了long。迴圈是線性複雜度o(n),結果秒出,真是舒服。
要好好的重視運算複雜度啊親!
斐波拉契數列
斐波拉契數列 1 1 2 3 5 8 13 21 34.其中每乙個數字都是前兩個數字的和。遞迴計算 long fibonacci int n 非遞迴計算 long fibonacci int n return result 這個函式的遞迴實現使用了雙重遞迴 double recursion 函式對本...
斐波拉契數列
編寫彙編程序列印1 1000的斐波拉契數列 原始碼assume cs code,ss stack,ds data data segment fibo dw 0,1,64 dup 0 str db the fibo list is 0ah,0dh,data ends stack segment db ...
斐波拉契數列
斐波拉契數列 這個數列從第三項開始,每一項都等於前兩項之和。已知斐波拉契數列的前兩項都是1,我們定義求斐波拉契數列的第n項 n 50 的函式為fbnq,請補充完成對fbnq函式的定義。輸入格式 共一行,為乙個正整數。輸出格式 共一行,為乙個正整數。輸入樣例 7輸出樣例 13 斐波拉契數列 def f...