这个给定代码片段的 Space 复杂度是多少?

What is the Space Complexity of this given code snippet?

时间复杂度为O(2^N)。如何导出此代码的 space 复杂度?

int f(int n){ 
   if(n <= 1){
      return 1;    
   }
   return f(n-1) + f(n-1);
}

Space 算法的复杂度是算法相对于输入大小的总 space。 Space 复杂性包括输入使用的辅助 space 和 space。

quick reference

基本上代码片段是一个递归代码 对于输入 n 它递归地调用 n-1

值 3 的调用示例:

f(3) f(2) + f(2) f(1) + f(1) [对于一个 f(2) ,和其他两个一样]

执行顺序会像DFS遍历

由于递归,程序将重用之前使用的相同程序space。

树的最大深度将导致 space 复杂度

O(N) - 其中 N 是输入数字

对于递归工作程序使用 Stack Memory