Js递归
传统的递归思想:自已调用自已,但是调用栈里面的执行上下文会越来越多,容易暴栈。
采用尾递归可以规避这个问题:每次入栈出栈再入栈
尾调用
// 尾调用
function f(x){
return g(x);
}
// 伪代码
ECStack.push(<f> functionContext);
ECStack.pop();
ECStack.push(<g> functionContext);
ECStack.pop();非尾调用
// 非尾调用
function f(x){
return g(x) + 1;
}
ECStack.push(<f> functionContext);
ECStack.push(<g> functionContext);
ECStack.pop();
ECStack.pop();示例:阶乘
function factorial(n, res) {
if (n == 1) return res;
return factorial(n - 1, n * res)
}
console.log(factorial(4, 1)) // 24
本文内容仅供个人学习、研究或参考使用,不构成任何形式的决策建议、专业指导或法律依据。未经授权,禁止任何单位或个人以商业售卖、虚假宣传、侵权传播等非学习研究目的使用本文内容。如需分享或转载,请保留原文来源信息,不得篡改、删减内容或侵犯相关权益。感谢您的理解与支持!