
递归在生产环境的代码里面很常见,比如说STL里面的std::sort,就很常用;遍历目录及其子目录,也是用递归。全世界的人每天要浏览无数个网页,浏览器解析html的时候,也有大量的递归。
尾递归可以轻易改成循环,但是非尾递归改成循环很多时候也要用自己的栈,根本就不能“节省空间”,还不如直接用递归,至少写代码还更简单。
在实际的需求中,有些时候迫不得已需要将递归改成用循环+状态机来实现,但很少是为了节省空间,而是为了使得整个过程可暂停、可重入。例如要做一个可以交互(暂停/继续)的汉诺塔动画,直接用递归是不行的,运行到中间停了就回不去了。我之前做过一个汉诺塔动画:
刚接触数据结构与算法,不需要考虑这么多,如果真要深究,先算一下递归到底多耗了几个字节的空间,这几个字节在现实中能节省多少成本。
