Рассматривая слагаемые в последовательности Фибоначчи, значения которых не превышают четырех миллионов, найдите сумму четных слагаемых - PullRequest
3 голосов
/ 29 марта 2020

Требуется помощь в этом проекте. Вопрос Эйлера: Рассматривая члены в последовательности Фибоначчи, значения которых не превышают четырех миллионов, найдите сумму четных членов.

Я уверен, что есть другие, более простые способы сделать это, но я только начинаю! Мне удалось получить код для вывода суммы четных членов последовательности Фибоначчи, но я понятия не имею, как установить предел вывода в четыре миллиона (я только что установил диапазон 1 - 10 для тестирования). Есть ли способ сделать это с помощью текущего кода, который я написал, вместо повторного запуска?

def fibonacci(n): 
    if n==0:
        return 0
    elif n==1 or n==2:
        return 1
    elif n>2:
        return (fibonacci(n-1)+fibonacci(n-2))


fib_list=[fibonacci(n) for n in range (1, 10) if fibonacci(n)%2==0]
fib_even=sum(fib_list)
print(fib_list)
print(fib_even)

Ответы [ 3 ]

1 голос
/ 29 марта 2020

Вот мое решение:

def fibonacci():
   sequence = [1, 2]
   total = 0

   while sequence[-1] < 4000000:
       if sequence[-1] % 2 == 0:
           total += sequence[-1]
       sequence.append(sequence[-1] + sequence[-2])

   print(total)

Проверка последнего элемента в списке гарантирует, что он не превысит 4 миллиона. Это также то, что sgfw подразумевал под их ответом. Я не уверен, как бы вы go реализовали это для понимания списка - это не было бы моим первым выбором для решения этой проблемы.

1 голос
/ 29 марта 2020

вы можете использовать встроенные функции sum и filter:

def fib(limit):
    a, b = 0, 1
    while a < limit:
        yield a
        a, b = b, a + b

sum(filter(lambda x: x%2==0, fib(4_000_000)))

вывод:

4613732

fib функция будет генерировать все числа Фибоначчи в то время как функция filter отфильтрует те числа, которые не являются четными, и, наконец, встроенная функция sum добавит все четные числа

0 голосов
/ 29 марта 2020

"while" l oop может быть более подходящим для этой проблемы, чем понимание списка. Возможно, даже проще всего использовать «while True» l oop с условным оператором «break».

...