递归的大O

时间:2015-08-20 08:24:05

标签: algorithm recursion big-o

这可能是一个虚假的问题。但是我想澄清一下.~所以选民下来......请加油。!! ;-)~

For recursive algorithms without while or for loops
 Total computation time is O(C) 
 C is total no of procedure calls 

e.g., For factorial computation it’s O(n) 
Must repeat all n operations hence O(n) 

以上是我在书上发现的一张纸条。但我不明白上面的O(C)和O(n)之间有什么区别。对于阶乘计算(使用递归),n是过程调用的数量。?

2 个答案:

答案 0 :(得分:1)

在此引文中,C可能意味着不变。在没有for/while loops(或分支)的任何代码中,都有一定数量的过程调用。因此,O(C)O(1)类似。
对于因子计算递归代码,factorial(n)在函数的n repetitions中计算。例如。 factorial的典型递归代码是:

fact(n){ 
    if(n==1 || n==0)
        return 1;
    return n*fact(n-1);
}

因此,/ {需要n repetitions否。因此,它的复杂性将是O(n)。

答案 1 :(得分:1)

文本只说,递归算法,其中一个调用在O(1)中运行(没有循环取决于输入长度或类似的东西),具有{的一切复杂性{ {1}},其中O(C)是递归调用的总数。

这意味着,您必须计算调用以计算此类算法的复杂性。

E.g。

C

这有factorial(n) if n <= 1 then return 1; else return n * factorial(n-1) 个递归调用,因此它在n

中运行
O(n)

这在fib(n) if n <= 2 then return 1; else return fib(n-1) + fib(n-2); 2n/2递归调用之间,因此它在2n中运行。