黑马程序员技术交流社区

标题: python实现斐波那契数列的几种方法 [打印本页]

作者: xianqiuhua    时间: 2018-6-20 17:19
标题: python实现斐波那契数列的几种方法
python实现斐波那契数列的几种方法

不久前,我们学习了迭代器, 其中有个练习:我们想要通过for...in...循环来遍历迭代斐波那契数列中的前n个数,要求用迭代器实现。
斐波拉契数列(Fibonacci),简单地说,数列中第一个数为0,第二个数为1,其后的每一个数都可由前两个数相加得到:
0, 1, 1, 2, 3, 5, 8, 13, 21, 34, ...


迭代器实现方式如下:

class Fibonacci(object):
    def __init__(self, n):
        self.n = n
        self.a = 0
        self.b = 1
        self.current_num = 0

    def __next__(self):
        if self.current_num < self.n:
            num = self.a
            self.a, self.b = self.b, self.a + self.b
            self.current_num += 1
            return num
        else:
            raise StopIteration

    def __iter__(self):
        return self
fib = Fibonacci(10)
for temp in fib:
    print(temp)

现在我们来探讨下,除了上述方法的其他实现方法:
实现方法一:根据斐波那契数列的特性,我们可以用最简单的循环遍历以及变量的值交换的方法实现,代码如下:
def fibonacci(num):
    a, b, i = 0, 1, 0
    while i < num:
        print(a)
        a, b = b, a+b
        i += 1

fibonacci(10)

实现方法二:考虑到从第三项开始,每一项的值都为前面两项的和,可以使用递归的方法来计算:
def fibonacci(n):
    if n < 2:
        return n
    else:
        return fibonacci(n-1) + fibonacci(n-2)

for i in range(10):
    print(fibonacci(i))

实现方法三:生成器实现。生成器是一种特殊的迭代器,前面说到迭代器的实现方法,那么我们也可以用生成器来实现,而且生成器比迭代器代码更加简洁:
def fibonacci(n):
    i = 0
    a, b = 0, 1
    while i < n:
        yield a
        a, b = b, a + b
        i += 1

fib = fibonacci(10)
for temp in fib:
    print(temp)


实现斐波那契数列的方法有很多,以上仅仅是我个人在平时的一个总结,欢迎大家 列出你们的方法








欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2