Py学习  »  Python

Python-通过考虑Fibonacci序列中值不超过400万的项,找到偶数值项的和

okvoyce • 4 年前 • 406 次点击  

寻求有关此项目Euler问题的帮助:

我相信还有其他更简单的方法可以做到这一点,但我只是刚刚开始!我已经设法让代码输出斐波那契序列的偶数项之和,但是我不知道如何将输出限制设置为400万(我刚刚设置了测试范围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)
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/57046
 
406 次点击  
文章 [ 3 ]  |  最新文章 4 年前
sgfw
Reply   •   1 楼
sgfw    4 年前

“while”循环可能比列表理解更适合这个问题。使用带有条件“break”语句的“while True”循环可能更容易。

AgentNo
Reply   •   2 楼
AgentNo    4 年前

以下是我的解决方案:

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)

对列表中最后一个元素的检查确保它不会超过400万。这也是sgfw所说的他们的反应。我不知道你会如何去实现一个列表理解-这不会是我解决这个问题的第一选择。

kederrac
Reply   •   3 楼
kederrac    4 年前

您可以使用内置函数 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 函数将生成所有斐波那契数,而 函数将筛选出那些不均匀的数字,最后 内置函数将添加所有偶数