对于这个问题,我们给了函数f,它以标准方式计算第n个斐波那契数:
f(n)
{
if(n == 0)
return 0;
if(n == 1)
return 1;
else return f(n-1) + f(n-2);
}
然后,我要负责计算函数在输入n上执行的算术运算次数。我知道每个对f的调用都会执行3个操作(2个减,1个加法),然后尝试通过扩展该函数尝试找到某种递归关系,然后算出要完成的算术运算数来找到它。但是后来我陷入困境,因为这不是正确的答案。
正确的答案是f对输入n进行3f(n + 1)-3个算术运算。请有人可以向我解释一下吗?这很重要,因为以后我们被要求以此为起点来查找时间复杂度。
非常感谢Niamh
您算法的时间复杂度接近2 ^(n)。因此它是O(2 ^ n)这是一个示例,说明如果n = 6时算法将如何求解
你的算法做到了T(n) = T(n-1) + T(n-2) + O(1)
。
T(n-1)= T(n-2)+ T(n-3)+ O(1)
T(n-2)= T(n-3)+ T(n-4)+ O(1)
。。。
T(2)= T(1)+ T(0)+ O(1)
看一下斐波那契时间的复杂性
T(n)= T(n-1)+ T(n-2)+ O(1)等于
T(n)= O(2 ^(n-1))+ O(2 ^(n-2))+ O(1)= O(2 ^ n)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句