第 1 题
数据结构求整数 ( ) 阶乘的算法如下,其时间复杂度是( )。
int fact(int n){
if (n<=1) return 1;
return n*fact(n-1);
}
A.
B.
C.
D.
查看答案与解析
参考答案:B
答案:B。
递归时间要看调用了多少次,以及每次额外做多少工作。fact(n)只调用一次fact(n−1),参数依次为n、n−1、……、1,共n层,每层除递归外只有判断、一次乘法和返回,按常数时间计算。因此 ,展开得到 ,选B。A要求每次把规模按比例缩小,如n/2;C要求每层还有对数等额外工作;D通常对应各层额外工作随规模线性增长,本程序都不具备。n=0、1会立即返回,但渐近复杂度考察n增大的情形;递归栈占O(n)空间,这是空间开销,不能误算成额外时间因子。