Python實現資料結構與演算法 斐波那契數

2021-10-23 03:33:07 字數 1667 閱讀 3635

斐波那契數,通常用 f(n) 表示,形成的序列稱為斐波那契數列。該數列由 0 和 1 開始,後面的每一項數字都是前面兩項數字的和。也就是:

f(0) = 0, f(1) = 1

f(n) = f(n - 1) + f(n - 2), 其中 n > 1.

給定 n,計算 f(n)。

示例 1:

輸入:2

輸出:1

解釋:f(2)

= f(1)

+ f(0)

=1+0=1.

示例 2:
輸入:3

輸出:2

解釋:f(3)

= f(2)

+ f(1)

=1+1=2.

示例 3:
輸入:4

輸出:3

解釋:f(4)

= f(3)

+ f(2)

=2+1=3.

0 ≤ n ≤ 30

這道題解題思路很多,這裡採用遞迴和動態規劃來解:

思路1:遞迴

關鍵的遞推關係:f(n) = f(n-1)+f(n-2)

基本問題(邊界條件)f(1)=f(2)=1

**如下:

時間複雜度:o(n)

空間複雜度:o(n)

思路2:動態規劃

依然利用遞推關係,至下而上解題。res為長度為n的陣列用來存放1到n下的結果。

狀態方程:res[n] =res[n-1] + res[n+1]

**如下:

class

solution

:def

fib(self, n:

int)

->

int:

if n ==

1or n ==0:

return n

res =[1

for _ in

range

(n)]

for i in

range(2

,n):

res[i]

= res[i-1]

+ res[i-2]

return res[n-

1]

測試結果:

時間複雜度:o(n)

空間複雜度:o(n)

這道題還有暴力法、採用輔助雜湊表的記憶化遞迴、公式法等等可以嘗試。

python資料結構與演算法

coding utf 8 import sys 使用以下語句將引數的str格式轉換為int格式 l list map int sys.argv 1 split target int sys.argv 2 def binarysearch print l print target left 0 rig...

資料結構與演算法 python

元類 基礎 冒泡 它重複地走訪要排序的數列,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來。走訪數列的工作是重複地進行直到沒有再需要交換,也就是說該數列已經排序完成。這個演算法的名字由來是因為越小的元素會經由交換慢慢 浮 到數列的頂端,故名氣泡排序。def bubble sort alist ...

python演算法與資料結構

若n1 n2 n3 1000,且n1平方 n2平方 n3平方 n1,n2,n3為自然數 求出所有n1 n2 n3可能的組合?n1 0 n2 0 n3 0 判斷n1 n2 n3是否等於1000,之後變n3 1,n3 2,n3 3,然後再變n2 那如果變為 n1 n2 n3 2000 了呢?思路1 實現...