1.時間複雜度 o(2^n) 空間複雜度 o(n)
def
fib(n):if
(n<3)
:return
1return f(n-1)
+f(n-
2)
推導:時間複雜度
f(n) = f(n-1) + f(n-2) 每一層都包含乙個加法操作
例如n = 8時,t(n) = 2^0 + 2^1 + 2^2 + 2^3 + 2^4 + 2^5 + 2^6 = 2^7-1
推導:空間複雜度
遞迴演算法是利用棧進行的,在例如計算 f(8)時,棧中最多同時存在f(8)-f(28個元素
,計算某個元素時並不知道哪個元素先入棧,為方便講解,假設元素大的先入棧。下面計算順序為棧中元素最多時的順序
1.計算f(8),f(8)進棧
2.計算f(8)時需要計算f(7)f(6),f(7)先進棧
3.計算f(7)時需要計算f(6)f(5),f(6)先進棧
4.計算f(6)時需要計算f(5)f(4),f(5)先進棧
5.計算f(7)時需要計算f(6)f(5),(4)先進棧
6.計算f(4)時需要計算f(3)f(2),f(3)先進棧
7.計算f(3)時需要計算f(2)f(1),f(2)先進棧,至此,棧中元素最多
8.計算f(2)時,返回1,f(2)出棧
9.根據7計算f(3)時還需要計算f(1),f(1)進棧
10.計算f(1)時,返回1,f(1)出棧
11.得到f(3)=f(2)+f(1) = 2
12.根據4計算f(4)時還需要計算f(4),f(4)進棧
13,計算f(4)時需要計算f(3)f(2),f(3)先入棧
2.時間複雜度 o(n) 空間複雜度 o(n)
def
fib(n)
: tmp = np.zeros(n)
tmp[0]
=1tmp[1]
=2for i in
range(2
,n):
tmp[i]
= tmp[i-1]
+tmp[i-2]
return tmp[n-
1]
3.時間複雜度 o(n) 空間複雜度 o(1)
def
fib(n)
: a =
1 b =
1 c =
0for i in
range(2
,n):
c = a + b
a = b
b = c
return c
斐波那契數與時間複雜度
斐波那契數列 經典數學問題之一 斐波那契數列,又稱 分割數列,指的是這樣乙個數列 1 1 2 3 5 8 13 21 第一項,第二項的值為1,第三項開始,它的值為前兩項之和。實現非常簡單 簡單的看看這個圖,分析一下,根據fab 1 n 1 fab 1 n 2 如果想要得到斐波那契其數的第五項,首先要...
演算法入門 斐波那契數列和演算法的時間複雜度
此處使用三種方式實現斐波那契數列 遞迴 遞推和通項公式。實現過程如下 include include include includeusing namespace std 遞迴 int recurrence1 int n 遞推 int recurrence2 int n 通項公式 得到的值都是整數 ...
關於斐波那契數列的複雜度最低演算法
description zyf總是有很多奇異的想法,他最近常常幻想著以後能開這麼乙個工廠,可以把前三天裡生產出來的東西拿到今天來拼在一起作為今天生產的東西。假如前三天生產出來的產品數分別是x,y,z,那麼今天就能生產出x y z個。這樣一來只要前三天的投入,接下來的工廠每一天都是0成本運作,但產品數...