首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >递归程序空间复杂度的差异

递归程序空间复杂度的差异
EN

Stack Overflow用户
提问于 2013-09-02 18:33:22
回答 2查看 1.4K关注 0票数 1

我想知道空间复杂度最低的递归程序和非递归程序的空间复杂度之间的区别,我知道递归在其操作中使用堆栈,但递归总是增加空间complexity.Can递归有助于降低空间复杂度吗?我也将感谢对recursion.Please中堆栈使用的良好教程的任何指导,如果可能的话,也提供了一个简短的说明示例。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-09-02 18:55:03

递归可以增加空间复杂度,但不会减少。例如,考虑插入到二进制搜索树。非递归实现(使用时间循环)使用O(1)内存。递归实现使用O(h)内存(其中h是树的深度)。

更正式的方式是:如果有一个空间复杂度为O(X)的递归算法,那么总是有具有空间复杂度O(X)的非递归算法(您只需使用堆栈模拟递归)。但情况并非如此(见上面的例子)。

票数 3
EN

Stack Overflow用户

发布于 2013-09-02 19:48:01

如果您的实现语言支持TCO,那么可以使用尾部递归作为循环迭代来实现完全相同的空间复杂度。

代码语言:javascript
复制
int acc=1;
(for int i=1; i<=n; i++) {
  acc*=i;
}
return acc;

与以下相同:

代码语言:javascript
复制
int fact (int i, int acc) {
  if( i == 1) 
     return acc;
  return fact(i--, i*acc);
}
return fact(n);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18579052

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档