大家都知道斐波那契數列,現在要求輸入乙個整數n,請你輸出斐波那契數列的第n項(從0開始,第0項為0,第1項是1)。
n<=39
之前寫過一題是需要返回整個斐波那契數列的,所以此次遞迴借助乙個初始化列表
class
solution1
:def
__init__
(self)
: self.fiblist =[0
,1]#前兩項
deffibonacci
(self, n)
:# write code here [0,1,1,2,3,5,8,13]
if n ==0:
return self.fiblist[n-2]
-1]+self.fiblist[-2
])#斐波那契數列最新項
return self.fibonacci(n-
1)
時間複雜度:o(2 ^ n),求解f(n),必須先計算f(n-1)和f(n-2),計算f(n-1)和f(n-2),又必須先計算f(n-3)和f(n-4)。。。。。。以此類推,直至必須先計算f(1)和f(0),然後逆推得到f(n-1)和f(n-2)的結果,從而得到f(n)要計算很多重複的值,在時間上造成了很大的浪費,演算法的時間複雜度隨著n的增大呈現指數增長,時間的複雜度為o(2^n),即2的n次方。執行超出時間範圍,不符合題目要求,但是邏輯是對的
class
solution
:def
fibonacci
(self, n)
:# write code here
if n <=1:
return n
return self.fibonacci(n-1)
+ self.fibonacci(n-
2)
較好理解的一種方法
class
solution3
:def
fibonacci
(self, n)
:# write code here
cur,per =0,
1#初始化斐波那契數列前兩項
index =
0#計步,對比n
while index < n:
cur,per = per,cur + per #求出斐波那契數列中的後一項
index +=
1#步數加1
return cur
7 劍指offer 斐波那契數列
大家都知道斐波那契數列,現在要求輸入乙個整數n,請你輸出斐波那契數列的第n項 從0開始,第0項為0 n 39 錯誤示範 遞迴複雜度過高,報錯顯示 記憶體溢位以及未在規定時間計算完成!class solution 遞迴的重複計算太多!可以改用迴圈,log n 時間複雜度,o 1 空間複雜度 class...
7 劍指offer 斐波那契數列
題目描述 大家都知道斐波那契數列,現在要求輸入乙個整數n,請你輸出斐波那契數列的第n項。n 39 解題思路 首先如果直接return fibonacci n 1 fibonacci n 2 的話會有很多值算了很多遍 因此思考如何遍歷一遍得到結果。首先0和1需要單獨計算,然後從2開始f2 f0 f1 ...
劍指offer 7 斐波那契數列
題目 大家都知道斐波那契數列,現在要求輸入乙個整數n,請你輸出斐波那契數列的第n項。n 39 思路 看到斐波那契數列就想有用遞迴的衝動,沒錯,剛開始我看了就往那個方向去想了,而且遞迴 只需要幾行就行了,if n 1 returnn elsereturnfibonacci n 1 fibonacci ...