考虑以下 C 函数:
double foo (int n) {
int i;
double sum;
if (n == 0) return 1.0;
else {
sum = 0.0;
for (i = 0; i < n; i++)
sum + = foo (i);
return sum;
}
}
上述函数的空间复杂度为
1) O(1)
2) O(n)
3) O(n!)
4) O(n^n)
根据我的说法,在上述问题中,答案应该是(2),但答案是(3)选项。虽然它是递归函数,但堆栈永远不会超过 O(n) 堆栈深度。谁能解释我为什么是这个答案(3),我在哪里想错了?