如果我们在算法中都可以使用循环而不是递归来替代递归,或者反之亦然,那么两者都可以达到相同的目的吗?例如:检查给定的字符串是否是回文。我已经看到许多程序员使用递归来证明简单的迭代算法何时可以胜任。编译器在决定使用什么时起重要作用吗?
取决于递归函数是否为尾递归(最后一行是递归调用),递归可能会更昂贵。尾递归 应该 由编译器识别,并针对其迭代对等进行优化(同时保持代码中简洁明了的实现)。
我将以最有意义的方式编写该算法,并且对于必须在几个月或几年内维护代码的可怜的傻瓜(无论是您本人还是其他人)最清晰。如果遇到性能问题,请先分析代码,然后再过渡到迭代实现,然后再进行优化。您可能需要研究记忆和动态编程。