Python:写斐波那契协程

问题描述 投票:0回答:1

我想编写一个在Python中表现为fibonaccicoroutine函数。

基本上是我想要要完成的事情:

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:
        value: int = (yield b)
        if value is not None:
            a, b = b, a + b + value
        else:
            a, b = b, a + b
        limit -= 1

任何人都可以帮助我找出python fibonacci协程的正确逻辑,我对如何正确制作它感到困惑,在此先感谢!

python fibonacci coroutine
1个回答
0
投票

您可以存储一个附加的index,以跟踪最近产生的斐波那契数的索引。然后,您可以根据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 = goto
© www.soinside.com 2019 - 2024. All rights reserved.