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

C 递归函数的空间复杂度(时间和空间),c,algorithm,time-complexity,space-complexity,C,Algorithm,Time Complexity,Space Complexity,下面是递归函数,我没有计算时间和空间的复杂度。我查看了一些资源,但对我的理解还不够清楚。谁能用最简单的方法解释一下解决问题的方法,并回答这个问题 顺便说一下,我试图解决时间复杂性问题,我发现了O2^n。对吗 int func(int n) { if (n < 3) return 3; else { return func(n-3)*func(n-3); } } 是的,时间复杂度确实是O2^n 时间复杂度的递推关系为: T

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

顺便说一下,我试图解决时间复杂性问题,我发现了O2^n。对吗

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

是的,时间复杂度确实是O2^n

时间复杂度的递推关系为: Tn=2*Tn-3

应用上述方程式k次: Tn=2*2*2。。。k次*Tn-3*k=2^k*Tn-3k

当k为n/3时,Tn=2^k=2^n/3=O2^n

一次只运行一个函数,堆栈深度最大为k。 有趣的是,空间复杂度为n/3或On,用z=funcx-3替换返回funcx-3*funcx-3;返回z*z;在保持相同结果的同时,将复杂性降低到On。