2012-05-30 60 views
10

我在采访时被问到解决检查pallindrome问题的有效方法。递归算法的空间复杂度

现在我可以做两两件事:

  1. 从i开始= 0到i = N/2和比较第i和n i个字符为相等。
  2. 我可以使用递归来检查第一个和最后一个是否相同,而其余的字符串是pallindrome。

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

回答

1

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

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

+0

对于大型数据集,即使使用尾递归,也会导致StackOverflow错误。没有? – Sudhakar

+0

@Sudhakar这正是尾递归优化防止:) –

+0

这个程序是一个有效的尾递归的例子。 这产生了计算器。 请纠正我,如果我错了。

 public class TailTest { \t public static void main(String[] args) { \t \t System.out.println(TailTest.iterate(100000)); \t } \t \t public static long iterate(int n){ \t \t if(n==1) return 1; \t \t \t \t return iterate(n-1); \t } } 
Sudhakar