c - 如何找到这种复杂性?

标签 c algorithm big-o recurrence

如果我有以下形式的函数,

int foo ( int n )
{
    if ( n == 0 )
        return 0;
    else
     return n + foo ( n-1)
}

使用 big-O 调用 foo(foo(n)) 的运行时间是多少。

递推关系为:f(n) = f(n-1) + n, f(0) = 0 因此复杂度是大O(n^2)。但是如何做到以上呢?

最佳答案

The recurrence relation is coming out to be, f(n) = f(n-1) + n, f(0) = 0 And therefore complexity is big-O(n^2).

实际上,foo函数的复杂度是O(n),因为你只是从n开始倒数,调用该函数时n - 1 并将结果添加到 n

现在,foo 返回的O(n^2),因为该函数计算总和1 + 2 + ... + n,即 n(n+1)/2

所以,我们有:

foo(foo(n)) = foo(something that is O(n^2)) = O(n^2)

因为外部 foo 的参数是线性的,即 O(n^2)

关于c - 如何找到这种复杂性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25836546/

相关文章:

c - 将 EOF 作为 C 中的输入。

PYTHON-给定一个起始单词,哪个字母序列将使您可以最大化可以拼写的有效单词的数量

algorithm - 删除k个顶点后的连通分量数

c++ - 如何找到机器上为 C 或 CPP 安装/可用的库?

c - getline() 函数中的行长 - c

php - 如何在 php 输出站点地图中打印所有可能的字符串(39 个非百万字符串)混合符号

algorithm - 降低排序算法中的大 O 复杂度

java - 一个 for 循环中的两个 for 循环的运行时间复杂度

c++ - 带内部while循环的while循环:O(n)或O(n ^ 2)?

使用结构时发出警告