首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python:编写fibonacci协同器

Python:编写fibonacci协同器
EN

Stack Overflow用户
提问于 2020-04-27 10:57:34
回答 1查看 159关注 0票数 0

我想编写一个在python中作为coroutine行为的coroutine函数。

下面是我希望完成的基本任务:

代码语言:javascript
复制
def fibonacci(limit: int) -> int:
    ...

fib = fibonacci(limit=100_000_000)
next(fib)
fib.send(10)  # -> 55
next(fib)  # -> 89
fib.send(15) # -> 610
...

--我试着用下面的代码片段来编写一些逻辑,但不幸的是,这并不是我想要的:

代码语言:javascript
复制
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

有谁能帮我弄清楚的正确逻辑吗?我有点搞不懂如何把它做好,谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-04-27 11:21:05

您可以存储一个额外的index来跟踪最近生成的Fibonacci数的索引。然后,您可以根据需要多少steps来根据send提供的值来计算序列

代码语言:javascript
复制
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
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61457290

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档