Tail Recursion
尾递归是递归调用为函数最后操作,编译器可优化为循环避免栈溢出。
用途
用递归表达循环逻辑而不增加栈深度,函数式语言核心。
机制
若递归调用为尾位置(返回前最后操作),TCO 将其转为跳转而非调用,复用栈帧。需语言支持(Scheme/SML 强制;JS 严格模式规范可选,但仅 Safari/JavaScriptCore 实现)。非尾递归需用累加器改写。
用例
- 函数式编程
- 栈溢出避免
- 递归优化
尾递归是递归调用为函数最后操作,编译器可优化为循环避免栈溢出。
用递归表达循环逻辑而不增加栈深度,函数式语言核心。
若递归调用为尾位置(返回前最后操作),TCO 将其转为跳转而非调用,复用栈帧。需语言支持(Scheme/SML 强制;JS 严格模式规范可选,但仅 Safari/JavaScriptCore 实现)。非尾递归需用累加器改写。