首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >此递归函数的迭代版本

此递归函数的迭代版本
EN

Stack Overflow用户
提问于 2016-11-11 14:16:22
回答 1查看 879关注 0票数 1

我有一个用这种方式定义的函数:

F(n) = n if n<=3 F(n) = F(n-1) + 2 * F(n-2) + 3 * F(n-3) if n>3

现在,我已经把它写成了一个递归函数,它工作得很好。我试图把它写成一个迭代函数,但我似乎无法实现它。

例如,输出应该是:

代码语言:javascript
复制
print(FRec(5))  =>     22
print(FRec(10)) =>   1657
print(FRec(15)) => 124905

有小费吗?

下面是我的递归实现:

代码语言:javascript
复制
def FRec(n):
    if(n <= 3):
        return n
    if(n > 3):
        return FRec(n - 1) + 2 * FRec(n - 2) + 3 * FRec(n - 3)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-11-11 14:19:55

您所需要的只是保存最后三个结果:

代码语言:javascript
复制
from collections import deque

def F_iter(n):
    if n <= 3:
        return n
    prev = deque([1, 2, 3], maxlen=3)
    for i in range(4, n + 1):
        result = prev[-1] + 2 * prev[-2] + 3 * prev[-3]
        prev.append(result)
    return prev[-1]

如果deque对您来说“不可用”,那么您可以用一些列表切片和连接来替换它:

代码语言:javascript
复制
    prev = [1, 2, 3]
    for i in range(4, n + 1):
        result = prev[-1] + 2 * prev[-2] + 3 * prev[-3]
        prev = prev[1:] + [result]

演示:

代码语言:javascript
复制
>>> F_iter(5)
22
>>> F_iter(10)
1657
>>> F_iter(15)
124905
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40549853

复制
相关文章

相似问题

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