Algorithm 函数f(n)=f(n-1)和#x2B的复杂度是多少;f(n-2)和#x2B;f(n-3)和#x2B+;1.

Algorithm 函数f(n)=f(n-1)和#x2B的复杂度是多少;f(n-2)和#x2B;f(n-3)和#x2B+;1.,algorithm,time-complexity,Algorithm,Time Complexity,计算n的这个函数的时间复杂度是多少 int rec(int n) { if (n<=1) { return n ; } int i; int sum=0; for (i=1; i<n; i++) { sum=sum+rec(i); } return sum ; } int rec(int n) { 如果(n好的,让我们打破这个 (1) f(n) = f(n-1) + f(n-2)

计算n的这个函数的时间复杂度是多少

int rec(int n)
{
    if (n<=1) {
        return n ;
    }
    int i;
    int sum=0;
    for (i=1; i<n; i++) {
       sum=sum+rec(i); 
    }
    return sum ;
}
int rec(int n)
{

如果(n好的,让我们打破这个

 (1)        f(n) = f(n-1) + f(n-2) + ... f(1) + 1
但是,

 (2)        f(n-1) = f(n-2) + ... f(1) + 1
因此,将(2)插入(1)中


f(2)=1,这显然是2n(细节:)。实际上是2n-1,但在大O中,这并不重要,因为-1与/2相同。

好吧,让我们来解释一下

 (1)        f(n) = f(n-1) + f(n-2) + ... f(1) + 1
但是,

 (2)        f(n-1) = f(n-2) + ... f(1) + 1
因此,将(2)插入(1)中


f(2)=1,所以这显然是2n(细节:)。实际上是2n-1,但在大O中,这并不重要,因为-1和/2是一样的。

我必须说的是非常好的答案。谢谢,非常好,我喜欢它,但它实际上不是对这个问题的答案吗?你刚刚演示了O(n^2)如上所述的递归算法是错误的,线性算法是可能的。别误会,这实际上比回答要好。@doomster,这是一个非常敏锐的观察。我怀疑OP使用该函数只是为了说明这种特定类型的运行时,而实际的函数(此处未显示)在每次递归调用中完成其他工作的函数。函数返回其运行时(它使用的+个数)有点滑稽。毕竟,既然存在一个封闭形式的公式,为什么不分析计算运行时并返回它呢?除此之外,这个函数还有一个递归的特性,尽管效率很低:一个返回运行时的函数。我必须说,这是一个非常好的答案。谢谢,非常好,我喜欢它,但它实际上不是对q的一个非答案吗你刚才证明了O(n^2)如上所述的递归算法是错误的,线性算法是可能的。别误会,这实际上比回答要好。@doomster,这是一个非常敏锐的观察。我怀疑OP使用该函数只是为了说明这种特定类型的运行时,而实际的函数(此处未显示)在每次递归调用中完成其他工作的函数。函数返回其运行时(它使用的+个数)有点滑稽。毕竟,既然存在一个封闭形式的公式,为什么不通过分析计算运行时并返回它呢。除此之外,这个函数尽管效率低下,但还是有一种递归的冷静:一个返回运行时的函数。