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

如何获取超大斐波那契数列最后一项?优化内存占用求助

优化斐波那契数列计算以避免内存错误

你的核心问题是把所有斐波那契数都存储到列表中,这才是导致内存溢出的根本原因——当n达到200万时,列表里会有200多万个超大整数,内存自然扛不住。完全不需要用del来释放内存,只要不存储所有前序数值,只跟踪当前和下一个数即可。

优化方案1:直接迭代生成器,不存储中间结果

不需要把生成器的所有值转成列表,直接迭代到目标项:

def fib(n):
    a, b = 0, 1
    for _ in range(n + 1):
        yield a
        a, b = b, a + b

target_n = 2000000
result = None
for idx, num in enumerate(fib(target_n)):
    if idx == target_n:
        result = num
        break

print(result)

优化方案2:更高效的直接计算(无生成器开销)

直接通过循环更新两个变量,连生成器的额外开销都省了,内存占用始终固定:

def get_fib(n):
    if n == 0:
        return 0
    a, b = 0, 1
    for _ in range(n):
        a, b = b, a + b
    return a

# 获取第2000000项斐波那契数
result = get_fib(2000000)
print(result)

为什么不需要用del?

你之前尝试的del操作完全没必要,因为优化后的代码从始至终只保留两个整数变量,不会积累大量中间值。内存占用和n的大小无关,不管n是200万还是更大,都不会触发内存错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 22:45:29