优雅地编写斐波那契序列的Python

时间:2018-08-10 11:33:04

标签: function python-2.x fibonacci

我正试图通过多种方式编写函数来提高自己的编程技能,这不仅教会了我新的编写代码的方式,而且使我了解了其他人的编写代码的方式。下面是一个函数,可计算斐波纳契序列中所有偶数之和,直到最大值。您对以其他方式编写此算法有什么建议,也许更紧凑或更Pythonic?

def calcFibonacciSumOfEvenOnly():
    MAX_VALUE = 4000000
    sumOfEven = 0
    prev = 1
    curr = 2


    while curr <= MAX_VALUE:
        if curr % 2 == 0:
            sumOfEven += curr

        temp = curr
        curr += prev
        prev = temp

    return sumOfEven

我不想递归地编写此函数,因为即使编写起来很简单,我也知道它会占用大量内存。

1 个答案:

答案 0 :(得分:1)

您可以使用生成器来生成斐波那契数列的偶数,直到达到给定的最大值,然后获取所生成数字的总和:

def even_fibs_up_to(m):
    a, b = 0, 1
    while a <= m:
        if a % 2 == 0:
            yield a
        a, b = b, a + b

因此:

print(sum(even_fibs_up_to(50)))

将输出:44(0 + 2 + 8 + 34 = 44)