天天看點

Fibonacci數列使用疊代器實作

Fibonacci數列,數列中第一個數為0,第二個數為1,其後的每一個數都可由前兩個數相加得到:

0, 1, 1, 2, 3, 5, 8, 13, 21, 34, ...

class FibIterator(object):
    """斐波那契數列疊代器"""
    def __init__(self, n):
        """
        :param n: int, 指明生成數列的前n個數
        """
        self.n = n
        # current用來儲存目前生成到數列中的第幾個數了
        self.current = 0
        # num1用來儲存前前一個數,初始值為數列中的第一個數0
        self.num1 = 0
        # num2用來儲存前一個數,初始值為數列中的第二個數1
        self.num2 = 1

    def __next__(self):
        """被next()函數調用來擷取下一個數"""
        if self.current < self.n:
            num = self.num1
            self.num1, self.num2 = self.num2, self.num1+self.num2
            self.current += 1
            return num
        else:
            raise StopIteration

    def __iter__(self):
        """疊代器的__iter__傳回自身即可"""
        return self


if __name__ == '__main__':
    fib = FibIterator(10)
    for num in fib:
        print(num, end=" ")