请考虑以下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),我在哪里想错了吗?