费波那契数列
费波那契数列又称之为费氏数列、黄金分割数列,这篇教学将会介绍使用 Python 函数的递回特性,做出一个费波那契数列。
本篇使用的 Python 版本为 3.7.12,所有范例可使用 Google Colab 实作,不用安装任何软件 ( 参考:使用 Google Colab )
什么是费波那契数列?
费波那契数列是一位意大利人费波那契 Leonardo Fibonacci,为了描述兔子生长的数目,使用这个数列来表现,费氏数列从 0 和 1 开始,之后的数字就是由之前的两数相加而得出,下方列出费氏数列开始的一些数字 ( 更多请参考:费波那契数 )。
1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377 ,610, 987……
费氏数值为数列中前后两个数值的加总,数列中的前后数值比例约为 1.618…,也就是所谓的黄金比例。
运用递回产生费波那契数列
下方的程序码,使用递回的方式来建立费波那契数列。
def fib(n): # 建立函式 fib,帶有參數 n
if n > 1: # 如果 n 大於 1
return fib(n-1) + fib(n-2) # 使用遞迴
return n
for i in range(20): # 產生 20 個數字
print(fib(i), end = ',') # 0,1,1,2,3,5,8,13,21,34,55,89,144,233,377,610,987,1597,2584,4181
如果无法理解当中递回的原理,可以参考下图:
使用循环产生费波那契数列
下方的例子,也可以在完全不使用递回的状况下,单纯透过“循环”+“串列”来呈现费波那契数列。
n = int(input()) # 輸入要產生的數字數量
arr = [] # 建立一個空串列,記錄數字
for i in range(n): # 使用 for 迴圈,重複指定的數字
if i==0: # 如果 i 等於 0,a 為 0
a = 0
elif i==1: # 如果 i 等於 1,a 為 1
a = 1
arr = [0, 1] # 將串列設定為 [0, 1]
else: # 如果 i 大於 1
a = arr[0] + arr[1] # a 等於串列的兩個數字相加
del arr[0] # 刪除串列的第一個項目
arr.append(a) # 將 a 加入串列成為第二個項目
print(a, end=',') # 0,1,1,2,3,5,8,13,21,34,55,89,144,233,377,610,987,1597,2584,4181
微信扫码关注
抖音扫码关注