Python中的偶数fibonacci序列的代码有什么问题?

2024-04-26 22:11:40 发布

您现在位置:Python中文网/ 问答频道 /正文

def fibonacci(n):
    first = 0
    second = 1
    count = 0
    while count <= n:
        if (second % 2 == 0):
            first, second = second, first + second
            count += 1
    return first, second

print (fibonacci(4000000))

有人能解释一下这个代码有什么问题吗?在空闲状态下,页面重新启动,但不返回任何答案。顺便说一句,我只是个程序员而已。你知道吗


Tags: 答案代码returnif状态defcount页面
3条回答

问题是if语句中有count变量。您创建了一个无限while循环。将其移到if语句之外:

    if(second % 2 == 0):
        first, second = second, first + second
    count +=1

此外,您还必须添加更多的代码,使其正常工作。你知道吗

因为这是针对Problem 2 of Project Euler,所以计算的值是错误的。它要求所有偶数斐波那契数的总和达到400万,而不是第400万。那就太大了。你知道吗

因为我们希望不断生成值,所以我们将使用生成器并将其与^{}组合。然后我们将^{}转换为偶数,然后找到^{}。你知道吗

import itertools

def fibonacci_gen():
    first = 0
    second = 1
    while 1:
        first, second = second, first + second
        yield second

你知道吗

>>> a = fibonacci_gen()
>>> sum(filter(lambda y: not y%2, itertools.takewhile(lambda x: x<=4e6, a)))
4613732

对于不使用这些功能的解决方案:

def fibonacci_4m():
    result = 0
    first = 0
    second = 1
    while second <= 4e6:
        first, second = second, first + second
        if not second%2:
            result += second
    return result

你知道吗

>>> fibonacci_4m()
4613732

second % 2以1开头,这并不奇怪。因此,您的while循环不会在体内运行任何东西,因此循环将永远运行。你知道吗

您可能希望总是计算下一个Fibonacci数,但仅当second为偶数时才增加计数。你知道吗

相关问题 更多 >