以下递归代码的Big-O
时间复杂度(O
)是多少?
public static int abc(int n) {
if (n <= 2) {
return n;
}
int sum = 0;
for (int j = 1; j < n; j *= 2) {
sum += j;
}
for (int k = n; k > 1; k /= 2) {
sum += k;
}
return abc(n - 1) + sum;
}
我的回答是O(n log(n))
。这是对的吗?
答案 0 :(得分:2)
我坐的地方......我认为运行时 O(n log n)。这就是原因。
您正在对该函数进行 n 调用。该函数肯定取决于 n ,表示进行以下两个操作的次数:
对于最坏的情况, n 非常大,但整体运行时间不会改变。最好的情况是 n &lt; = 2,这样只进行一次操作(不会发生循环)。