优雅地书写斐波那契数列 Python
Writing Fibonacci Sequence Elegantly Python
我正在尝试通过以多种方式编写函数来提高我的编程技能,这教会了我编写代码的新方法,同时也了解了其他人编写代码的风格。下面是一个函数,它计算斐波那契数列中所有偶数的总和,直到最大值。您对以不同方式编写此算法有什么建议,可能更紧凑或更 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
我不想递归地写这个函数,因为我知道它占用大量内存,尽管写起来很简单。
您可以使用生成器生成斐波那契数列的偶数直到给定的最大值,然后获得生成数的总和:
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)
我正在尝试通过以多种方式编写函数来提高我的编程技能,这教会了我编写代码的新方法,同时也了解了其他人编写代码的风格。下面是一个函数,它计算斐波那契数列中所有偶数的总和,直到最大值。您对以不同方式编写此算法有什么建议,可能更紧凑或更 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
我不想递归地写这个函数,因为我知道它占用大量内存,尽管写起来很简单。
您可以使用生成器生成斐波那契数列的偶数直到给定的最大值,然后获得生成数的总和:
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)