第 1 题
数据结构求整数n(n≥0)阶乘的算法如下,其时间复杂度是( )。
int fact (int n){
if(n<=1) return 1
return n * fact(n-10)
}
A. O(log2n)
B. O(n)
C. O(nlog2n)
D. O(n2)
查看答案与解析
参考答案:B
题目详解:
该题目考察的是递归算法的时间复杂度分析。给定的算法是一个计算阶乘的递归函数,其定义如下:
int fact(int n) {
if (n <= 1) return 1;
return n * fact(n - 1);
}
-
递归调用次数分析:
- 每次递归调用时,参数 减 1,直到 时停止递归。
- 因此,递归的深度为 次(从 递减到 1)。
-
时间复杂度分析:
- 每次递归调用只包含一次乘法操作和一次递归调用,因此每次调用的时间复杂度为 。
- 总的时间复杂度是递归调用次数乘以每次调用的时间复杂度,即 。
-
排除其他选项:
- A. :对数复杂度通常出现在分治或二分搜索中,不适用于线性递归。
- C. :通常出现在分治算法(如快速排序或归并排序)中,不适用于线性递归。
- D. :平方复杂度通常出现在嵌套循环中,递归深度为 且每次操作 时不会达到。
综上所述,该算法的时间复杂度为 。
正确答案:B














