专业网站建设品牌,十四年专业建站经验,服务6000+客户--广州京杭网络
免费热线:400-683-0016      微信咨询  |  联系我们

尾递归究竟是好是坏_java

当前位置:网站建设 > 技术支持
资料来源:网络整理       时间:2023/3/7 0:40:42       共计:3597 浏览

尾递归究竟是好是坏?

概念

递归如果层次太多,就会照成栈溢出异常,因为每调用一次就会新生成一个栈帧,使用这个栈帧保留当前函数的状态值。如果没有必要保存状态值,那么就可以复用栈帧,不会造成栈溢出。

举例

这里以求n的阶乘举例:

正常递归:

假如n=3;那么每一步都需要保留n值以及下一步函数的返回值,所以每次调用都需要创建一个新的栈帧

尾递归:

假如n=3,这里每一次调用是可以复用栈帧的,因为不需要保存状态值。

总结

所以说当递归是在当前栈帧执行完之后,不需要再保留当前栈帧,而是带着当前栈帧的结果,进入到下一栈帧,就可以优化为尾递归,一般尾递归需要满足递归调用是函数体中最后执行的语句。比如阶乘的例子中最后执行的语句是直接调用factorial(n-1, n*result),而不是一个表达式n * factorial(n -1),如果是表达式的话就需要一个栈帧来保留n和factorial(n -1)的结果。

版权说明:
本网站凡注明“广州京杭 原创”的皆为本站原创文章,如需转载请注明出处!
本网转载皆注明出处,遵循行业规范,如发现作品内容版权或其它问题的,请与我们联系处理!
欢迎扫描右侧微信二维码与我们联系。
·上一条:Java如何实现五分钟内重复获取返回同一个短信验证码_java | ·下一条:Java中Class类与Object类之间有什么关系_java

Copyright © 广州京杭网络科技有限公司 2005-2025 版权所有    粤ICP备16019765号 

广州京杭网络科技有限公司 版权所有