函数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)
答案 0 :(得分: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)和 f(n-1)的c
,在每个迭代步骤,我们计算 f(n),因此我们转移:a
变为{ {1}},b
变为b
,c
获取新值。我们这样做,直到达到请求的c
。
所以最初我们将计算 f(3)。在这种情况下,n
f(0)= 0 ,a
f(1)= 1 ,b
是 f(2)= 2 。现在,在迭代之后,c
需要 f(1)= 1 ,a
需要 f(2)= 2 和{{1}取 f(3)= f(2)+ 2×f(1)+ 3×f(0)= 5 ,你一直这样做,直到b
有权{ {1}}。
这会更快,因为在递归变体中,您需要c
和c
,但n
会在途中调用f(n-2)
,从而引入重复的工作。
答案 1 :(得分:0)
如果您希望函数返回第一个n
元素,则可以使用带有O(n)
空格和时间的memoization的简单动态编程:
def F(n):
f = [0]*n
f[:4] = range(4)
for i in range(4, n):
f[i] = f[i-1] + f[i-2] + f[i-3]
return f
print F(20)
# [0, 1, 2, 3, 6, 11, 20, 37, 68, 125, 230, 423, 778, 1431, 2632, 4841, 8904, 16377, 30122, 55403]