在下面的代码中,我知道时间复杂度为O(n),但是如何以正确的方式证明它呢? 是说搜索数组足够O(n)吗?
int f[N];
F(n)
{
if (f[n] >= 0) return f[n];
f[n] = F(n-1) + F(n-2);
return f[n];
}
int main()
{
read n;
f[0] = 0; f[1] = 1;
for (i = 2; i <= n; i++)
f[i] = -1;
print F(n);
}
答案 0 :(得分:0)
对于数组的每个元素,您都调用F。对您来说,这似乎是递归的,但实现不好。实际上,每个f [n-1]和f [n-2]调用都只返回值。
您将有3n次呼叫F(n),因此仍然是O(n)。
如果您不必递归,则可以使用单个循环对其进行编程。