首页 > 代码库 > 拾遗:关于“尾递归”——tail recursive
拾遗:关于“尾递归”——tail recursive
定义[个人理解]:
尾递归,即是将外层得出的常量计算因子,以函数参数的形式逐层向内传递,即内层调用整合外层调用的产出,整个递归的结果最终由最内层的一次函数调用得出;而通常的递归则是外层调用阻塞、等待内层调用的产出,最后由最上层的一次函数调用得出最终结果。
优执:
适度应用,可以带来效率的提升,同时在一定程度上提升程序的稳定性。
局限:
效率提升取决于编译器的优化策略,最终结果存在不确定性,即使内层调用在逻辑上已可独立运行;
仅可作为潜在的效率提升措施,但不能做为循环的替代,因为其不能保证 100% 避免栈溢出风险;
现代编译器已足够智能,结构简单的普通递归可被自动优化为尾递归,过度沉迷尾递归的结构得不偿失。
示例:
如在 clang-4.0 环境下, 本在已测试良好的尾递归函数中添加如下两句,将导致尾递归失效,从而爆栈使程序崩溃!
int A[1024 * 1024 * 8]; printf("%p", &A);
结论:
偶尔惊艳,但不实用,不可作为常规手段。
拾遗:关于“尾递归”——tail recursive
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。