演算法 費波那契數列演算法

2022-02-06 21:23:40 字數 1539 閱讀 6361

2023年10月27日20:06:54

f0 = 0     (n=0)

f1 = 1    (n=1)

fn = f[n-1]+ f[n-2](n=>2)

分析:當n=0時為0,n=1時為1,n>2時,最後兩數之和。由此可知,鍊錶fibs初始化0,1;列表可以當做鍊錶使用,具有負數索引特性,採用後兩位數相加追加即可。

import datetime

#由於斐波那契特性前兩首0,1,其後各項均為之前兩數之和可知,時間複雜度o(n)

def fib(n):

fibs=[0,1]

for i in range(n-2): #開始兩項已知

return fibs[-1]

#迭代實現,時間複雜度o(n)

def fib1(n):

a,b = 0,1

for i in range(n-1):

a,b= b,a+b

return a

#遞迴演算法實現,其中n=0返回0,n=1返回1,n>=2返回之前兩項之和,時間複雜度o(nlgn)

def fib12(n):

if n == 0:

return 0

elif n == 1:

return 1

else:

return fib1(n-2)+fib1(n-1)

# 遞迴進行初始化o(nlgn)

def fib3(n):

init =

if not n in init:

init[n]=fib2(n-2)+fib2(n-1)

return init[n]

print(datetime.datetime.now())

#print("1\t"+str(fib(10000))) #0.1s

print(datetime.datetime.now())

print("2"+str(fib3(10000))) #0.8s

print(datetime.datetime.now())

#print("3\t"+str(fib1(30))) #3.4s

print(datetime.datetime.now())

#print("4\t"+str(fib2(30)) #7.1s

print(datetime.datetime.now())

class ideone

//遞迴演算法

public static int fib(int n)

//非遞迴演算法

public static int fib1(int n)

//遞迴演算法

int fib(int n)

//非遞迴演算法

int fib1(int n)

//遞迴演算法

public static int fib(int n)

//非遞迴演算法

public static int fib1(int n)

return a;

}}

Python演算法 斐波那契數列

典型的遞迴演算法 快速排序會用到 先做個鋪墊 斐波那契數列即著名的兔子數列 1 1 2 3 5 8 13 21 34 數列特點 該數列從第三項開始,每個數的值為其前兩個數之和,用python實現起來很簡單 定義fibonacci數列如下 非遞迴方法的函式實現 def fibs num result ...

演算法之斐波那契數列

斐波那契數列 fibonacci sequence 又稱 分割數列 因數學家列昂納多 斐波那契 leonardoda fibonacci 以兔子繁殖為例子而引入,故又稱為 兔子數列 斐波那契當時是為了描述如下情況的兔子生長數目 第乙個月初,有一對剛誕生的兔子 第二個月之後 第三個月初 它們可以生育 ...

斐波那契數列Log n 演算法

想法源於題目 乙個人一次可以上乙個台階,也可以上兩個台階,問上到20級台階有多少種走法?這就是乙個斐波那契數列 登上第一級台階有一種登法 登上兩級台階,有兩種登法 登上 台階,有三種登法 登上四級台階,有五種方法 所以,1,2,3,5,8,13 我們也會發現 f 3 f 2 f 1 f 4 2 f2...