【JS特性】函数尾调用
2022/02/25 09:18:09
概念
函数调用时生成调用记录,保存调用位置和内部变量等信息(调用帧),尾调用是指函数的最后一步操作
尾调用优化就是在进行尾调用时不保存外部的调用信息,节省内存
尾递归
大部分浏览器仍不支持尾调用。
在递归中使用尾调用可以大幅减少内存消耗,称为尾递归
用递归实现阶乘,复杂度为 O(n)
function factorial(n) {
if (n === 1) return 1;
return n * factorial(n - 1); // 返回了一个函数调用与变量的表达式
}
用尾递归方式实现阶乘,复杂度为 O(1)
function factorial(n, total) {
if (n === 1) return total; // total为计算值也是最后的返回值
return factorial(n - 1, n * total); // 返回了一个函数调用
}