关于“递归”与“非递归”的转换

来源:互联网 发布:七彩云南淘宝店真的吗 编辑:程序博客网 时间:2024/05/04 01:43
尾递归(Tail-Recusive function)可以转换为循环

什么是尾部递归?-参阅 精通递归程序设计。

如何判断您的 JIT 能否转换尾递归:编译并运行如下程序(参照提高Java代码的性能),如果您的 JIT 编译器把尾递归调用转换成迭代,这个程序将无限期地运行下去。它所需的内存很小,而且不会随时间增加。如果  JIT 不做这种转换,程序将会很快耗尽堆栈空间并报告一个堆栈溢出错误。 


非尾部递归可以用来转换  

递归和非递归,其实都是一样的。非递归需要人为构建维护堆栈;递归只是系统在帮你维护堆栈而已。(摘自如何用栈实现递归与非递归的转换)