国际空间研究组织 | ISRO CS 2015 |问题 40
以下 C函数的时间复杂度为(假设 n > 0)
int recursive (int n) {
if(n == 1)
return (1);
else
return (recursive (n-1) + recursive (n-1));
}
(A) O(n)
(B) O(n log n)
(C) O(n 2 )
(D) O(2 n )答案: (D)
解释:代码的递归关系 = T(n) = 2T(n-1) + k。
我们可以使用替换方法解决递归:
T(n) = 2T(n-1) + k
= 2(2T(n-2) + k) + k
= 2(2(2T(n-3) + k) + k) + k.....
= 2xT(n-x) + 2(1 + 2 +....+ 2x-1)k
When base condition is met, i.e. n=1, x=n-1
= 2n-1 T(1) + k(2n)
= O(2n)
所以,选项(D)是正确的。
这个问题的测验