鱼C论坛

 找回密码
 立即注册
查看: 670|回复: 1

[已解决]有关递归函数的空间复杂度

[复制链接]
发表于 2020-6-9 00:12:50 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
1 int x(int n)
2 {
3     if(n<=3)
4     {
5         return 1;
6     }
7     else
8     {
9         return x(n-2)+x(n-4)+1;
10     }
11 }

有人解释说空间复杂度是递归次数,时间复杂度是调用函数的次数,但我还是不太明白递归次数应该怎么算,x(n-2)和x(n-4)不是各自都递归了吗是不是算是两次递归,那这样的话空间复杂度应该是O(2^n),但是答案是O(n)。
我就是没办法理解这一点,递归次数和调用函数次数有什么不同,递归次数应该怎么算?
最佳答案
2020-6-9 01:23:47
时间复杂度,计算总共耗时
空间复杂度,当前占用的空间规模。

在代码 L:9 出,函数调用有先后关系,并且,为同步调用(不是并行)。
因此,假设,执行顺序从左到右(或者从右到左,都不影响),先计算 x(n-2),当执行结束之后,额外的递归调用栈空间被回收,然后再执行 x(n-4)。

因此,对于函数 x 而言,空间复杂度,就是递归函数调用的深度。
即,O(n)。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-6-9 01:23:47 | 显示全部楼层    本楼为最佳答案   
时间复杂度,计算总共耗时
空间复杂度,当前占用的空间规模。

在代码 L:9 出,函数调用有先后关系,并且,为同步调用(不是并行)。
因此,假设,执行顺序从左到右(或者从右到左,都不影响),先计算 x(n-2),当执行结束之后,额外的递归调用栈空间被回收,然后再执行 x(n-4)。

因此,对于函数 x 而言,空间复杂度,就是递归函数调用的深度。
即,O(n)。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-28 04:36

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表