斐波那契与生成器

Moi*_*eda 0 python generator fibonacci

我正在尝试使用生成器进行斐波那契继承,但我的代码返回 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))
Run Code Online (Sandbox Code Playgroud)

Nic*_*ick 5

您的问题是,当您分配 时b = a + b,您已经将 的值更新a为 的旧值b。因此,您有效地分配了b = b + bor 2*b,这就是您得到0, 1, 2, 4, 8, ...结果的原因。您可以通过同时分配a和来解决这个问题:b

def fibonacci():
    a, b = 0, 1
    while True:
        yield a
        a, b = b, a + b

fib=fibonacci()

for i in range(10):
    print(next(fib))
Run Code Online (Sandbox Code Playgroud)

输出:

0
1
1
2
3
5
8
13
21
34
Run Code Online (Sandbox Code Playgroud)