递归算法的空间复杂度

Posted

技术标签:

【中文标题】递归算法的空间复杂度【英文标题】:Space complexity of recursive algorithm 【发布时间】:2012-06-04 23:16:49 【问题描述】:

我在一次采访中被问到,这是解决检查回文问题的有效方法。

现在我可以做两件事:

    从 i = 0 到 i = n/2,比较第 i 个和第 n 个字符是否相等。 我可以使用递归来检查 first 和 last 是否相同,并且字符串的其余部分是回文。

第二个是递归的。我的问题是算法的递归和非递归版本的空间复杂度有什么区别?

【问题讨论】:

【参考方案1】:

理论上它们具有相同的空间复杂度;这很大程度上取决于tail recursion是否可以优化。

如果是这样,堆栈会在每次递归时被替换,因此不会产生惩罚。

【讨论】:

对于大型数据集,即使使用尾递归,也会导致 *** 错误。没有? @Sudhakar 这正是尾递归优化所阻止的 :) 这个程序是尾递归的有效例子吗?这会产生 *** 。如果我错了,请纠正我。
 public class TailTest  public static void main(String[] args)  System.out.println(TailTest.iterate(100000));  public static long iterate(int n) if(n==1) return 1;返回迭代(n-1);   
@Sudhakar 在这种情况下,没有进行尾递归优化【参考方案2】:

阅读全文

    http://www.codeproject.com/Articles/21194/Iterative-vs-Recursive-Approaches Recursion or Iteration?

基本上,递归算法会增加开销,因为您将递归调用存储在执行堆栈中。

但如果递归函数是调用的最后一行(尾递归),则没有额外的惩罚。

当然这两种算法都是一样的。

【讨论】:

以上是关于递归算法的空间复杂度的主要内容,如果未能解决你的问题,请参考以下文章

递归斐波那契算法的空间复杂度是多少?

数据结构&算法_算法基础之前传(递归时间复杂度空间复杂度二分查找)

s11d27 算法

《数据结构与算法》第一篇

算法:排序

算法基本概念