递归算法的空间复杂度
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?
基本上,递归算法会增加开销,因为您将递归调用存储在执行堆栈中。
但如果递归函数是调用的最后一行(尾递归),则没有额外的惩罚。
当然这两种算法都是一样的。
【讨论】:
以上是关于递归算法的空间复杂度的主要内容,如果未能解决你的问题,请参考以下文章