《劍指offer》第7題 斐波那契數列

2021-10-07 14:20:48 字數 1263 閱讀 3823

大家都知道斐波那契數列,現在要求輸入乙個整數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 ...