下面有递归函数,我没有计算时间和空间复杂度。我查看了一些资源,但是对于我的理解来说还不够清楚。谁能以最简单的方式解释解决方法并回答问题?
顺便说一句,我试图解决时间复杂性,发现O(2 ^ n)。正确吗?
int func(int n) {
if (n < 3)
return 3;
else {
return func(n-3)*func(n-3);
}
}
答案 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)
当k
为n/3
时,T(n) = 2 ^ k = 2 ^ (n / 3) = O(2 ^ n)
一次只运行一个函数,堆栈深度最大为k
。
因此,空间复杂度为n / 3
或O(n)