我经历了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
答案 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