实现斐波那契数列

斐波那契数列(Fibonacci sequence),又称黄金分割数列、因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:1、1、2、3、5、8、13、21、34、……在数学上,斐波纳契数列以如下被以递归的方法定义:F(0)=0,F(1)=1, F(n)=F(n-1)+F(n-2)(n>=2。(摘自百度百科)
通俗点理解就是,一组有规律的数字集合。规律是:紧邻前面两个数字的和等于第三个数,如 ,0,1,1,2,3,5,8,13…….(相信一眼能看出规律吧。)下面我使用三种方法实现斐波那契 数列:

方法一、通过迭代器实现

class FibIterator(object):
    def __init__(self, n):
        self.n = n
        # 是使用current保存当前数列中第几个数
        self.current = 0
        # 使用num1保存数列中前一个数,初始值为0
        self.num1 = 0
        # 使用num2保存数列中后一个数,初始值为1
        self.num2 = 1

    def __next__(self):
        # 判断迭代当前个数小于我们输入数字
        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):
        # 迭代器标志 ,返回自身
        return self


# 程序入口
if __name__ == '__main__':
    fib = FibIterator(5)
    for num in fib:
        print(num, end=" ")

输出结果:
0 1 1 2 3

方法二、通过生成器实现

def fib(n):
    current = 0
    num1, num2 = 0, 1
    while current < n:
        num = num1
        num1, num2 = num2, num1+num2
        current += 1
        yield num
    return

if __name__ == '__main__':
    f = fib(5)
    for _ in fib(5):
        print(next(f), end=" ")

输出结果为:
0 1 1 2 3

方法三、通过函数实现

def fibonacci(n):
    a, b = 0, 1
    fib_list = [0,]
    for _ in range(n - 1):
        a, b = b, a + b
        fib_list.append(a)
    return fib_list
print(fibonacci(9))

输出结果为:
[0, 1, 1, 2, 3, 5, 8, 13, 21]

猜你喜欢

转载自blog.csdn.net/qq_30656253/article/details/79823907