You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python计算400万以下偶数斐波那契数之和时无限运行问题求助

解决4000000以下偶数斐波那契数求和的“无限运行”问题

嘿,我来帮你排查这个问题!你的代码之所以在400万上限时看起来像“无限运行”,核心问题是循环条件完全错误——你用循环计数i < 3999998来控制循环,而不是判断生成的斐波那契数是否在400万以下。

问题根源分析

斐波那契数列是指数级增长的,400万以下的斐波那契数其实只有十几个(比如:1, 2, 3, 5, 8, 13, ..., 3524578),根本不需要循环近400万次。你当前的循环会执行3999998次,这会花费极长的时间,看起来就像程序卡住了。

修正后的基础版本代码

我们应该直接判断生成的斐波那契数是否超过400万,超过就停止循环,同时累加其中的偶数:

sum_even = 2  # 初始的偶数2先计入总和
fib1, fib2 = 1, 2

while True:
    fibn = fib1 + fib2
    if fibn >= 4000000:
        break
    if fibn % 2 == 0:
        sum_even += fibn
    # 更新下一对斐波那契数
    fib1, fib2 = fib2, fibn

print(sum_even)

这个版本的循环次数只有十几次,运行后会瞬间输出正确结果4613732。

更高效的优化版本

利用斐波那契数列的奇偶性规律:每3个斐波那契数中会出现1个偶数,且偶数项满足递推公式 E(n) = 4*E(n-1) + E(n-2),我们可以直接生成所有偶数项,省去奇偶判断的步骤:

sum_even = 0
# 初始偶数项:E1=F2=2,E2=F5=8
e_prev_prev = 2
e_prev = 8
sum_even = e_prev_prev

while e_prev < 4000000:
    sum_even += e_prev
    e_next = 4 * e_prev + e_prev_prev
    e_prev_prev, e_prev = e_prev, e_next

print(sum_even)

这个版本的循环次数更少,效率更高,结果和基础版本一致。

内容的提问来源于stack exchange,提问作者Mohammad Riaz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 04:04:36