当前位置:  开发笔记 > 编程语言 > 正文

循环的迭代

如何解决《循环的迭代》经验,为你挑选了1个好方法。

函数f由规则定义

在此输入图像描述

写一个函数f(n),f通过迭代过程计算

我写了这个.并且仍然没有做对.请告知如何解决它.

def f(n):
    if (n<3):
        return n
    else:
        for x in range (n):
            a = f(n-1) + 2*f(n-2) + 3*f(n-3)
            return (a)

Willem Van O.. 6

只需使用内存缓存:

def f(n):
    if n < 3:
        return n
    a,b,c = 0,1,2
    for i in range(n-2):
        a,b,c = b,c,c+2*b+3*a
    return c

在这个函数中我们a用来表示f(n-3),b表示f(n-2),c对于f(n-1),在每个迭代步骤,我们计算f(n),因此我们移位:a变成b,b变成cc获得新的价值.我们这样做直到达到要求为止n.

所以最初我们将计算f(3).在这种情况下,aF(0)= 0,bF(1)= 1,和cF(2)= 2.在迭代之后,af(1)= 1,bf(2)= 2,cf(3)= f(2)+ 2×f(1)+ 3×f(0)= 5,你一直这样做,直到c有权利n.

这将更快地工作,因为在递归变体中,您需要f(n-2)并且f(n-1),但是f(n-1)将在他的路上调用f(n-2)因此引入重复的工作.



1> Willem Van O..:

只需使用内存缓存:

def f(n):
    if n < 3:
        return n
    a,b,c = 0,1,2
    for i in range(n-2):
        a,b,c = b,c,c+2*b+3*a
    return c

在这个函数中我们a用来表示f(n-3),b表示f(n-2),c对于f(n-1),在每个迭代步骤,我们计算f(n),因此我们移位:a变成b,b变成cc获得新的价值.我们这样做直到达到要求为止n.

所以最初我们将计算f(3).在这种情况下,aF(0)= 0,bF(1)= 1,和cF(2)= 2.在迭代之后,af(1)= 1,bf(2)= 2,cf(3)= f(2)+ 2×f(1)+ 3×f(0)= 5,你一直这样做,直到c有权利n.

这将更快地工作,因为在递归变体中,您需要f(n-2)并且f(n-1),但是f(n-1)将在他的路上调用f(n-2)因此引入重复的工作.

推荐阅读
可爱的天使keven_464
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有