ramlife

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

递归

普通情况,n只进行加减,多少的 n 次方,取决于返回几个

void fun(int n)
{
    ...
    return fun(n-1)
}

上面的就是 O(n)

void fun(int n)
{
    ...
    return fun(n-1) + fun(n-2);
}

上面的就是 O(2 n),因为每次都是分裂成为两个,所以是 2 的 n 次方。

void fun(int n)
{
    ...
    return fun(n-1) + fun(n-2) + fun(n-3);
}

上面的就是 O(3 n),因为每次都是分裂成为三个,所以是 3 的 n 次方。

特殊情况:n 涉及到乘除

void fun(int n)
{
    ...
    return fun(n / 2)
}

上面的就是 O(log2 n), 因为每次都要除以2,所以用几次,取决于 n 是 2 的多少次方,也就是以 2 为底,求 log.

循环

普通循环,n 只设计加减,n 的多少次方,取决于循环的层数

void fun()
{
    for (int i = 0; i < n + 1; i++) {}
}

上面就是 O(n)

void fun()
{
    for (int i = 0; i < n + 1; i++) {
        for (int j = 0; j < m - 1; m++) {}
    }
}

上面就是 O(n 2),因为是两层循环,所以是 n 的平方。

特殊情况,n 涉及到乘除

void fun()
{
    for (int i = 0; i < (1 << n); i++) {}
}

上面就是 O(2 n),因为 n 进行了移位的操作,所以相当于是 2 的 n 次方,所以结果就是 2 的n次方。

参数:

算法复杂度分析
https://www.cnblogs.com/gaochundong/p/complexity_of_algorithms.html

posted on 2022-08-31 17:19  ramlife  阅读(21)  评论(0编辑  收藏  举报