递归算法的空间复杂度

时间:2012-05-30 17:14:45

标签: space-complexity

我在接受采访时被问及解决问题检查pallindrome的有效方法。

现在我可以做两件事:

  1. 从i = 0开始到i = n / 2,并将第i个和第n个字符相等。
  2. 我可以使用递归检查第一个和最后一个是否相同,其余字符串是pallindrome。
  3. 第二个是递归的。我的问题是算法的递归和非递归版本的空间复杂度有什么不同?

2 个答案:

答案 0 :(得分:9)

阅读

  1. http://www.codeproject.com/Articles/21194/Iterative-vs-Recursive-Approaches
  2. Recursion or Iteration?
  3. 基本上,递归算法会增加开销,因为您在执行堆栈中存储递归调用。

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

    当然,两种算法都是相同的。

答案 1 :(得分:1)

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

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