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
相关产品推荐
相关产品推荐

