小编典典

查找提供的序列的第N个术语

algorithm

f(0)= p

f(1)= q

f(2)= r

对于n> 2

f(n)= a f(n-1)+ b f(n-2)+ c * f(n-3)+ g(n)

其中g(n)= n * n *(n + 1)

给定p,q,r,a,b,c问题是,如何找到该系列的第n个项。

请帮助我找到一个更好的解决方案。

我尝试使用递归解决此问题。但这会消耗大量内存。


阅读 243

收藏
2020-07-28

共1个答案

小编典典

比递归更好的方法是记忆。您只需要知道f(n)的最后三个值即可。伪代码的解决方案如下所示:

if n == 0:
    return p
else if n == 1:
    return q
else if n == 2:
    return r
else:    
    f_n-3 = p
    f_n-2 = q
    f_n-1 = r
    for i from 3 to n:
        f_new = a * f_n-1 + b * f_n-2 + c * f_n-3 + g(n)
        fn-1 = fn-2
        fn-2 = fn-3
        fn-3 = f_new

return f_new

这样,您无需递归调用该方法并将所有计算出的值保留在堆栈中,而只需在内存中保留4个变量即可。

这应该计算得更快,并使用更少的内存。

2020-07-28