这可能是一个虚假的问题。但是我想澄清一下.~所以选民下来......请加油。!! ;-)~
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是过程调用的数量。?
答案 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
中运行。