以下递归函数的时间复杂度是多少:
int DoSomething (int n)
{
if (n <= 2)
return 1;
else
return (DoSomething (floor(sqrt(n))) + n);
}
(一种) (n)
(B) (登录)
(C) (登录)
(D) (登录)
(A) A
(B) B
(C) C
(D) D答案: (D)
说明: DoSomething()的递归关系为
T(n)= T( )+ C1如果n> 2
我们已经忽略了floor()部分,因为在这里是地板还是天花板都没有关系。
Let n = 2^m, T(n) = T(2^m)
Let T(2^m) = S(m)
From the above two, T(n) = S(m)
S(m) = S(m/2) + C1 /* This is simply binary search recursion*/
S(m) = O(logm)
= O(loglogn) /* Since n = 2^m */
Now, let us go back to the original recursive function T(n)
T(n) = S(m)
= O(LogLogn)
这个问题的测验