13.3Python基礎拾遺(3):斐波那契數列的遞迴、非遞迴、生成器實現
阿新 • • 發佈:2019-02-15
@斐波那契數列
- fibonacci數列的前幾項是這樣的:0,1,1,2,3,5,8…;
- 即從第三項開始的每一項,等於前面兩項之和;
- 通過令程式和裝置求fibonacci數列的某一高位項,是運算力測試的一個經典問題;
@求fibonacci的第N項:非遞迴實現
# 0,1,1,2,3,5,8...
# 求斐波那契數列第N項非遞迴實現
def getFibonacci(n):
a = 0
b = 1
for i in range(n):
# 把b和temp分別賦值給a和b(也只有Python才能這麼任性!)
a, b = b, a+b
return a
@求fibonacci的第N項:遞迴實現
# 0,1,1,2,3,5,8...
# 求斐波那契數列第N項遞迴實現
def getFibonacci(n):
if n == 0:
return 0
elif n == 1:
return 1
# 遞迴求取前兩項的值
# 遞迴的終止條件就是n等於0或1
else:
return getFibonacci(n - 1) + getFibonacci(n - 2)
@斐波那契數列生成器
# 連續生成n個斐波那契數
def fibonacciGenerator (n):
a = 0
b = 1
for i in range(n):
if i > 0:
# 把b和temp分別賦值給a和b
a, b = b, a+b
# 當i==0時,a為0,i==1時,a為1...
yield a
從fibonacciGenerator中分批索取資料
fg = fibonacciGenerator(6)
# 迭代器的簡易遍歷
# for item in fg:
# print(item)
# time.sleep(1)
# 迭代器輪詢
while True:
try:
print(next(fg))
except StopIteration:
break