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...