网上很多人传言,尾递归能优化“栈溢出”,事实真的如此吗?
吃瓜群众,遇到这种事最好的方法就是自己亲自测试一下。
下面是三段递归累加代码对比:
// 普通 递归
function factorial1(n) {
if (n === 1) return 1;
return n + factorial1(n - 1);
}
// 尾递归
function factorial2(n, total) {
if (n === 1) return total;
return factorial2(n - 1, n + total);
}
// 函数式传参递归
function factorial13Callback(n,callback){
if (n === 1) return 1;
return n + callback(n - 1, callback)
}
function factorial13(n, callback) {
if (n === 1) return 1;
return n + callback(n - 1, callback);
}
node 测试,上述截图未node 版本
// 普通递归可以支撑 11399 次数
console.log(factorial1(11399))
console.log(factorial2(10449,1))
console.log(factorial13(10449, factorial13Callback))
// 尾递归 和 函数式传参递归 都只能支撑 10449次数
11399 > 10449
上述代码只要多加一次递归就是报 “栈溢出”
console.log(factorial1(11399))
console.log(factorial2(10449,1))
console.log(factorial13(10449 + 1, factorial13Callback))
浏览器递归最大支撑,同样,多加1就会“栈溢出”
-
« 上一篇:
css 动效网址
-
js获取客户端真实IP
:下一篇 »