关于“递归”与“非递归”的转换
来源:互联网 发布:七彩云南淘宝店真的吗 编辑:程序博客网 时间:2024/05/04 01:43
尾递归(Tail-Recusive function)可以转换为循环
非尾部递归可以用栈来转换
什么是尾部递归?-参阅 精通递归程序设计。
如何判断您的 JIT 能否转换尾递归:编译并运行如下程序(参照提高Java代码的性能),如果您的 JIT 编译器把尾递归调用转换成迭代,这个程序将无限期地运行下去。它所需的内存很小,而且不会随时间增加。如果 JIT 不做这种转换,程序将会很快耗尽堆栈空间并报告一个堆栈溢出错误。
如何判断您的 JIT 能否转换尾递归:编译并运行如下程序(参照提高Java代码的性能),如果您的 JIT 编译器把尾递归调用转换成迭代,这个程序将无限期地运行下去。它所需的内存很小,而且不会随时间增加。如果 JIT 不做这种转换,程序将会很快耗尽堆栈空间并报告一个堆栈溢出错误。
递归和非递归,其实都是一样的。非递归需要人为构建维护堆栈;递归只是系统在帮你维护堆栈而已。(摘自如何用栈实现递归与非递归的转换)
- 关于“递归”与“非递归”的转换
- 关于“递归”与“非递归”的转换
- 递归与非递归的转换
- 递归与非递归转换
- 如何用栈实现递归与非递归的转换
- 如何用栈实现递归与非递归的转换
- 如何用栈实现递归与非递归的转换
- 如何用栈实现递归与非递归的转换
- 如何用栈实现递归与非递归的转换
- 如何用栈实现递归与非递归的转换
- 如何用栈实现递归与非递归的转换
- 如何用栈实现递归与非递归的转换
- 如何用栈实现递归与非递归的转换
- 如何用栈实现递归与非递归的转换
- 递归与非递归及其相互转换
- 递归与非递归相互转换
- 递归与非递归及其相互转换
- 关于回溯算法的递归与非递归解法
- 最新版CodeSmith3.2(.net2.0)教程之二:第一次用CodeSmith生成代码
- 最新版CodeSmith3.2(.net2.0)教程之三:了解你要创建一个什么模板
- CRM
- 最新版CodeSmith3.2(.net2.0)教程之四:生成属于你的第一个模板
- 最新版CodeSmith3.2(.net2.0)教程之五:SQL2005数据模板(上)
- 关于“递归”与“非递归”的转换
- 回顾:北软一年《转载)
- 最新版CodeSmith3.2(.net2.0)教程之六:SQL2005数据模板(下)
- 最新版CodeSmith3.2(.net2.0)教程之七:CodeSmith与Visual Studio的结合
- bbb
- 今天受刺激了
- C#处理四舍五入的问题
- 身份证号码相关处理单元及例程
- .NET中窗体间相互访问的几种方式