1. 程式人生 > >13.3Python基礎拾遺(3):斐波那契數列的遞迴、非遞迴、生成器實現

13.3Python基礎拾遺(3):斐波那契數列的遞迴、非遞迴、生成器實現

@斐波那契數列

  • 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