python生成器之斐波切纳数列

Posted 做一个有情怀的人

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python生成器之斐波切纳数列相关的知识,希望对你有一定的参考价值。

面试的时候遇到过这样的一个题目:

斐波切纳数列1,2,3,5,8,13,21.........根据这样的规律,编程求出400万以内最大的斐波切纳数,并求出是第几个斐波切纳数。

方法一

 

方法二:这个方法用到了生成器:

生成器介绍:通过列表生成式,我们可以直接创建一个列表。但是,受到内存限制,列表容量肯定是有限的。而且,创建一个包含100万个元素的列表,不仅占用很大的存储空间,

如果我们仅仅需要访问前面几个元素,那后面绝大多数元素占用的空间都白白浪费了。

所以,如果列表元素可以按照某种算法推算出来,那我们是否可以在循环的过程中不断推算出后续的元素呢?这样就不必创建完整的list,从而节省大量的空间。在Python中,这种

一边循环一边计算的机制,称为生成器(Generator)。

生成器tips:

generator保存的是算法,每次调用next(),就计算出下一个元素的值,直到计算到最后一个元素,没有更多的元素时,抛出StopIteration的错误。

当然,上面这种不断调用next()方法实在是太变态了,正确的方法是使用for循环,因为generator也是可迭代对象。

generator是非常强大的工具,在Python中,可以简单地把列表生成式改成generator,也可以通过函数实现复杂逻辑的generator。

要理解generator的工作原理,它是在for循环的过程中不断计算出下一个元素,并在适当的条件结束for循环。对于函数改成的generator来说,遇到return语句或者执行到函数

最后一行语句,就是结束generator的指令for循环随之结束

def fib(max):
    a,b = 0, 1
    while b<max:
        yield b
        a,b = b, a+b
index
=0 for i in fib(4000000): index = index+1 print str(index) +"" +str(i)

以上是关于python生成器之斐波切纳数列的主要内容,如果未能解决你的问题,请参考以下文章

python之斐波纳契数列

斐波那契数列

JavaScript之斐波那契数列的几种实现方法兔子数列黄金分割数列递归for解构

LintCode题解之斐波纳契数列

Fibonacci数列

算法之斐波那契数列