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

使用Generators实现Fibonacci序列返回2**a错误结果如何解决

问题描述

使用生成器(Generators)实现斐波那契序列时,代码运行返回类似2**a形式的错误值,无法得到符合预期的斐波那契数列,原实现代码如下:

def fibonacci():
    a, b = 0, 1
    while True:
        yield a
        a = b
        b = a + b
n = int(input("How long? "))
fib = fibonacci()

for i in range(n):
    print(next(fib))
错误原因

变量更新顺序存在逻辑问题:

  • 代码先执行a = b,此时变量a存储的旧值已经被覆盖为上一轮的b值
  • 后续执行b = a + b时,参与求和的a是更新后的值,计算逻辑等价于b = b + b = 2*b,每轮数值都会翻倍,最终输出的是2的幂次序列,不符合斐波那契数列的递推规则。
修复方法

斐波那契递推计算新值时需要同时用到上一轮的两个变量值,使用Python的并行赋值语法可以在不引入临时变量的前提下,一次性完成两个变量的同步更新,避免中间值覆盖导致的计算错误。
修正后的完整代码:

def fibonacci():
    a, b = 0, 1
    while True:
        yield a
        # 等号右侧先基于旧值完成所有计算,再同步赋值给左侧变量
        a, b = b, a + b

n = int(input("How long? "))
fib = fibonacci()

for i in range(n):
    print(next(fib))

以输入长度10为例,运行后输出为0、1、1、2、3、5、8、13、21、34,符合斐波那契数列的预期结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 11:15:41