以下递归代码的时间复杂度(以大O表示法)?

时间:2013-04-22 03:44:49

标签: recursion big-o time-complexity

以下递归代码的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))。这是对的吗?

1 个答案:

答案 0 :(得分:2)

我坐的地方......我认为运行时 O(n log n)。这就是原因。

  • 您正在对该函数进行 n 调用。该函数肯定取决于 n ,表示进行以下两个操作的次数:

    • 循环最多2 * log(n)值以增加总和。

对于最坏的情况, n 非常大,但整体运行时间不会改变。最好的情况是 n &lt; = 2,这样只进行一次操作(不会发生循环)。