递归函数的空间复杂度(时间和空间)

时间:2018-11-18 14:14:55

标签: c algorithm time-complexity space-complexity

下面有递归函数,我没有计算时间和空间复杂度。我查看了一些资源,但是对于我的理解来说还不够清楚。谁能以最简单的方式解释解决方法并回答问题?

顺便说一句,我试图解决时间复杂性,发现O(2 ^ n)。正确吗?

int func(int n) { 
     if (n < 3)
         return 3;
     else {
         return func(n-3)*func(n-3);
     }
}

1 个答案:

答案 0 :(得分:1)

是的,时间复杂度的确是O(2 ^ n)

时间复杂度的递归关系为: T(n) = 2 * T(n - 3)

k次应用上述公式: T(n) = 2 * 2 * 2 ... k times * T(n - 3 * k) = 2 ^ k * T(n - 3k)

kn/3时,T(n) = 2 ^ k = 2 ^ (n / 3) = O(2 ^ n)

一次只运行一个函数,堆栈深度最大为k。 因此,空间复杂度为n / 3O(n)