我想编写一个在python中作为coroutine行为的coroutine函数。
下面是我希望完成的基本任务:
def fibonacci(limit: int) -> int:
...
fib = fibonacci(limit=100_000_000)
next(fib)
fib.send(10) # -> 55
next(fib) # -> 89
fib.send(15) # -> 610
...--我试着用下面的代码片段来编写一些逻辑,但不幸的是,这并不是我想要的:
def fibonacci(limit: int) -> int:
a, b = 0, 1
while limit:
c: int = (yield b)
if c is not None:
a, b = b, a + b + c
else:
a, b = b, a + b
limit -= 1有谁能帮我弄清楚的正确逻辑吗?我有点搞不懂如何把它做好,谢谢!
发布于 2020-04-27 11:21:05
您可以存储一个额外的index来跟踪最近生成的Fibonacci数的索引。然后,您可以根据需要多少steps来根据send提供的值来计算序列
def fibonacci(limit):
a, b = 0, 1
index = 1 # the index of the fibonacci number 'b'
while index < limit:
goto = (yield b)
if goto is None:
goto = index + 1
if goto > limit:
break
steps = goto - index
if steps >= 0:
for __ in range(steps):
a, b = b, a + b
else:
for __ in range(-steps):
a, b = b - a, a
index = gotohttps://stackoverflow.com/questions/61457290
复制相似问题