斐波那契數列又稱費波那契數列(意大利語:Successione di Fibonacci),又譯為費波拿契數、斐波那契數列、費氏數列、黃金分割數列。在西方,首先研究這個數列的是比薩的列奧那多(意大利人斐波那契Leonardo Fibonacci(1175-1250)),斐波那契在1202年著的《計算之書》中描述了該數列。(百度百科)
在數學上,以遞歸的形式來定義這個數列。
F0 = 0F1 = 1Fn = Fn-1 + Fn-2 (n≥2)
也就是說,該數列的第0項是0,第1項是1,從第2項開始,每項都是前兩項的和。
很多教科書中在描述該問題時都是從第1項開始的,也就是說:
F1 = 1F2 = 1Fn = Fn-1 + Fn-2 (n≥3)
下面給出再Python中的實現方法:
1、列表版
N = 40 #輸出項數
fn = [1,1] #定義前兩項
i = 2 #從第3項開始計數
# 循環賦值
while i < N:
fn.append(fn[ i - 1 ] + fn[ i - 2 ]) # 每項是前兩項的和
i += 1 #循環變量遞增
for e in fn: # 迭代輸出列表中的每一項
print(e)
輸出結果(結果較長,這里省略了中間的項):
1
2、變量版
1
2
3
5
8
13
21
...
24157817
39088169
63245986
102334155
f1 = 1 # 第1項
f2 = 1 # 第2項
i = 2 # 從第3項開始循環
N = 40 / 2 #因為每次輸出兩項,所以除以2
# 每次輸出兩項,因為在循環開始時輸出
# 會造成最后兩項不會輸出,所以這里要+1
while i <= N + 1:
print(f1,",",f2)
f1 = f1 + f2 # 第n項
f2 = f1 + f2 # 第n + 1項
i += 1 # 循環計數+1
輸出結果:
1 , 1
3、簡潔版
2 , 3
5 , 8
13 , 21
34 , 55
89 , 144
233 , 377
610 , 987
1597 , 2584
4181 , 6765
10946 , 17711
28657 , 46368
75025 , 121393
196418 , 317811
514229 , 832040
1346269 , 2178309
3524578 , 5702887
9227465 , 14930352
24157817 , 39088169
63245986 , 102334155
f1,f2 = 0, 1
N = 40
i = 2
while i <= N + 1:
print (f2, end = ' ')
f1,f2 = f2, f1 + f2
這個算法會把所有的項輸出到一行中,每個用空格隔開。
輸出結果:
1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181 6765 10946 17711 28657 46368 75025 121393 196418 317811 514229 832040 1346269 2178309 3524578 5702887 9227465 14930352 24157817 39088169 63245986 102334155
4、控制每行輸出的數量
f1,f2 = 0,1
N = 40
i = 2
j = 0
num_per_row = 5
while i <= N + 1:
print(f2,end = ' ')
j += 1
if j % num_per_row == 0:
print('/n',end = '')
f1,f2 = f2, f1 + f2
i += 1
輸出結果:
1 1 2 3 5
8 13 21 34 55
89 144 233 377 610
987 1597 2584 4181 6765
10946 17711 28657 46368 75025
121393 196418 317811 514229 832040
1346269 2178309 3524578 5702887 9227465
14930352 24157817 39088169 63245986 102334155
5、使用函數輸出第n項
def Fibonacci(n):
if n < 0:
raise IndexError('參數不能小于0。')
if n == 0:
return 0
elif n <= 2:
return 1
else:
return Fibonacci(n - 1) + Fibonacci(n - 2)
v = Fibonacci(30)
print(v)
輸出結果:
832040
以上介紹了Python中計算Fibonacci數列的相關算法,如有不妥之處,請留言評論。
新聞熱點
疑難解答