繁体   English   中英

这个递归函数的迭代版本

[英]Iterative version of this recursive function

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

if n<=3 F(n) = n

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

现在,我把它写成一个递归函数,它工作正常。 我试图把它写成一个迭代函数,但我似乎无法实现它。

输出应该是,例如:

print(FRec(5))  =>     22
print(FRec(10)) =>   1657
print(FRec(15)) => 124905

有小费吗?

这是我的递归实现:

def FRec(n):
    if(n <= 3):
        return n
    if(n > 3):
        return FRec(n - 1) + 2 * FRec(n - 2) + 3 * FRec(n - 3)

您只需要保留最后3个结果:

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不是“可用”的,那么你可以用一些列表切片和连接来低效地替换它:

    prev = [1, 2, 3]
    for i in range(4, n + 1):
        result = prev[-1] + 2 * prev[-2] + 3 * prev[-3]
        prev = prev[1:] + [result]

演示:

>>> F_iter(5)
22
>>> F_iter(10)
1657
>>> F_iter(15)
124905

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM