天天看點

67.斐波那切數列的三種實作方法(遞歸函數、清單負數索引和自定義疊代類)

1.遞歸函數實作法

def fibo(n):
    if n==0:
        return 0
    elif n==1:
        return 1
    else:
        return fibo(n-1)+fibo(n-2)
           

2.清單負數索引法

def fibo2(n):
    f=[0,1]
    for i in range(n):
        f.append(f[-2]+f[-1])
    return f[n]

#輸入數值
print(fibo(10))
print(fibo2(10))
           

輸出結果:

67.斐波那切數列的三種實作方法(遞歸函數、清單負數索引和自定義疊代類)

3.自定義疊代類法

class Fibonacci:
    def __init__(self):
        self.a=0
        self.b=1
    def __next__(self):
        result=self.a
        #這種序列指派中"self.a+self.b"中的self.a依然是原來的值,而不是新賦的值
        #是以,這個指派
        #self.a=self.b
        #self.b=self.a+self.b
        #是不等值的。要注意這個問題。
        self.a,self.b=self.b,self.a+self.b
        return result
    def __iter__(self):
        return self

fibs=Fibonacci()
#fibs就是調用next函數,fib就是next的傳回值
for fib in fibs:
    print(fib,end=' ')
    if fib>200:
        break
           

輸出結果:

67.斐波那切數列的三種實作方法(遞歸函數、清單負數索引和自定義疊代類)