function - 用 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)
推荐阅读
- python - 使用 Python 在 Plotly Express 上按变量 ID 绘制子图
- javascript - 防止功能在第一个条件满足时停止
- apache2 - 如何仅通过 URL 从 apache 服务器下载完整目录
- group-by - SQL 是否有办法在不将组压缩成单行的情况下对行进行分组?
- angular - Webpack/Angular CLI - 如何在 HTML 中嵌入脚本而不是引用它们?
- spring - java.lang.ClassCastException:java.util.concurrent.FutureTask 无法转换为 com.model.Employee - Spring Batch Async
- google-apps-script - Google Apps 脚本递归调度触发器
- c# - .NET Core 发布编译错误
- java - 如何直接从 Java 调用 esql/c 程序
- wix - 如何使用 wix 3.11 burn 检测 .Net Framework 4.7.2