如何用无停止号的发电机写斐波那契

时间:2019-08-19 03:33:09

标签: python fibonacci

我经历了Beginning Python fibonacci generator

如何在我们要停靠的地方写出不停靠的号码。

我的FIbnocci密码低于

def Fibonnaci(n):
    if n == 0:
        return 0
    if n == 1:
        return 1
    else:
        return (Fibonnaci(n-1)+ Fibonnaci(n-2))

n = int(input())
print(Fibonnaci(n))

我写了yield语句,但是它运行着无限循环

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

fib(7)

所需>     13

3 个答案:

答案 0 :(得分:1)

yield语句用于迭代某些数据,一次生成一个值。

因此:重复在其上

f = fib()
fibs = [next(f) for _ in range(7)]
fib_7 = fibs[-1]

注释(以yield a开头),第一个数字为0。因此请转到yield b,它将按预期运行

答案 1 :(得分:1)

您不想无限循环;您需要跟踪执行一次操作的次数。

在生成元素时将计数器的状态保持在循环中。一直走到count >= n

def fib(n):
     count = 0
     a, b = 0, 1
     while count < n:
             yield a
             a, b = b, a + b
             count += 1

然后,您可以根据需要在列表推导中利用此功能,以使所有值都达到该斐波纳契数。

[i for i in fib(10)]

答案 2 :(得分:0)

n = int(input())
def fibonacci():
    a, b = 0, 1
    while True:
        yield a
        a, b = b, a + b  #swap the values, sum

def firstn(g, n):
    for i in range(n):
        yield g.__next__() # take  the next value for the generator


t =  (list(firstn(fibonacci(), n+1))) # Put in a list
print (t[-1])   #take the last element