斐波拉契數列相信大家都很熟了吧
下面我將介紹三種方法
方法一:經典遞迴
int
fibonacci
(int n)
方法二:方法一的改進
由於方法一中存在很多重複計算的步驟,效能大大降低
我定義乙個map容器,來存放第1項到第n項的值,如果map中沒有第 i 項的值,就將該元素插入到map中,下次如果需要用到第 i 項的值,直接從map中取即可,不用再重複計算一次
int
fibonacci2
(int n));
}else
int ppre =0;
//f(n - 2)的值
if(map.
find
(n -2)
== map.
end())
);}else
return
(pre + ppre)
%1000000007
;}
方法三:迭代int
fibonacci3
(int n)
return third;
}
【方法三和方法一的效能比較】:兩種方法同時求第45項的值,方法三很快,方法一用了3秒多。
方法四:動態規劃
int
fibonacci4
(int n)
return dp[n]
;}
【高能預警】不怕死的朋友可以看接下來的斐波拉契加強版
剛看到這道題的朋友,肯定覺得不就是變成了從0開始嘛,有什麼好怕的?來遞迴,迭代走起。然後,你會發現,你怎麼都過不了,要麼時間超時,記憶體超出,要麼卡死求當n = 12這個數上。這道題求斐波拉契的一般方法好像都行不通了,只有試試數學方法
斐波拉契數列
斐波拉契數列 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...