Итерация по последовательности Фибоначчи

Поэтому я хотел бы повторить последовательность Фибоначчи (но это может относиться к любой неарифметической последовательности). Я написал функцию Фибоначчи:

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 ответ

Каков диапазон 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)
Другие вопросы по тегам