我在采访时被问到解决检查pallindrome问题的有效方法。递归算法的空间复杂度
现在我可以做两两件事:
- 从i开始= 0到i = N/2和比较第i和n i个字符为相等。
- 我可以使用递归来检查第一个和最后一个是否相同,而其余的字符串是pallindrome。
第二个是递归的。我的问题是算法的递归和非递归版本的空间复杂度有什么区别?
我在采访时被问到解决检查pallindrome问题的有效方法。递归算法的空间复杂度
现在我可以做两两件事:
第二个是递归的。我的问题是算法的递归和非递归版本的空间复杂度有什么区别?
在
有一个读基本上,因为你存储在执行堆栈的递归调用递归算法会增加开销。
但是,如果递归函数是调用的最后一行(尾递归),那么没有额外的惩罚。
那当然两种算法都是一样的。
理论上它们具有相同的空间复杂度;它在很大程度上取决于tail recursion是否可以优化。
如果是这样,堆栈会在每次递归时被替换,所以不会受到惩罚。
对于大型数据集,即使使用尾递归,也会导致StackOverflow错误。没有? – Sudhakar
@Sudhakar这正是尾递归优化防止:) –
这个程序是一个有效的尾递归的例子。 这产生了计算器。 请纠正我,如果我错了。
– Sudhakar