int factorial(int n)
{
if(n < 0) {return -1;}
if(n == 0) {return 1;}
return n*factorial(n-1);
}
为了确定时间复杂度,我建立了一个递归关系。
T(n) = T(n-1) + c = T(n-2) + 2c = ... = T(n-k) + kc => O(n)
T(0) = 1;
对于那种算法(比如斐波那契数列),一般的找到空间复杂度的方法是什么?我们需要找到调用栈的深度吗?
factorial
函数都会在内存的“堆栈”部分创建一个堆栈帧以供该调用使用。单个堆栈帧将包含在此函数中定义的变量、函数中的参数和返回地址。在这种情况下,对于每个调用,存储这些信息可以在常数时间内完成。由于对该函数的调用数量是线性的,因此总内存将为O(n)。 - Shubham