迭代斐波纳契数列

时间:2016-10-01 01:04:10

标签: python iteration sequences

所以我想迭代斐波那契序列(但这可能适用于任何非算术序列)。我写了一个函数斐波那契:

from math import sqrt
def F(n):
    return ((1+sqrt(5))**n-(1-sqrt(5))**n)/(2**n*sqrt(5))

返回任何给定输入的斐波纳契数。这一点似乎工作正常。但是,我希望包含一些条件,例如偶数和F(n)低于某个限制。我尝试使用这样的if循环:

def ser():
    count = 0
    for i in F(n):
        if F(n) <= 4000000 and F(n) % 2 == 0:
            count = count + F(n)

但似乎你不能像我一样在循环迭代中使用F(n)。我是python的一个完整的新手,那么最好如何使用我创建的F(n)函数迭代序列?感谢

1 个答案:

答案 0 :(得分:0)

您希望运行斐波纳契数的n的范围是多少? 您对斐波那契的定义是封闭形式,因此您需要给出您想要计算的每个数字:

import itertools
count = 0
for n in itertools.count(1):
    if F(n) > 4000000:
        break
    if F(n) % 2 == 0:
        count += F(n)

您可以使用斐波纳契的生成器形式并使用itertools.takewhile()来限制输出:

def F():
    a,b = 0,1
    yield b
    while True:
        a, b = b, a + b
        yield b

count = sum(f for f in it.takewhile(lambda x: x <= 4000000, F()) if f % 2 == 0)