一个月前,我接受了一些谷歌PTO成员的面试。其中一个问题是:
使用JS递归地反转一个字符串并用大O表示其运行时间
这是我的解决方案:
function invert(s){
return (s.length > 1) ? s.charAt(s.length-1)+invert(s.substring(0,s.length-1)) : s;
}
很简单,我认为。
关于大O符号,我迅速回答说运行时间与输入成线性关系,因此是O(n)。然后他问我,如果通过迭代实现,运行时间有什么不同?
我回答说,有时编译器会将递归“翻译”成迭代(一些编程语言课程的记忆),因此在这种情况下,迭代和递归没有区别。顺便说一句,由于我没有收到关于这个问题的反馈,面试官也没有回答“好”或“不行”,所以我想知道您是否同意我的看法,或者您能否解释一下这两种实现方式可能存在的差异。
非常感谢!