关于尾递归的疑惑
这是一个标准的尾递归
function factorial(n, total) {
if (n === 1) return total;
return factorial(n - 1, n * total);
}
这是另一个函数,它的返回值只有sum 和 x 为什么不是尾递归
function sum(x, y) {
if (y > 0) {
return sum(x + 1, y - 1);
} else {
return x;
}
}
浏览器并不支持尾函数优化,第一个尾递归也会发生栈溢出
浏览器想使用尾函数优化,想解决栈溢出的问题可以使用蹦床函数或者尾递归优化
function tco(f){
var value;
var active =false;
var accumulated =[];
returnfunction accumulator(){
accumulated.push(arguments);
if(!active){
active =true;
while(accumulated.length){
value = f.apply(this, accumulated.shift());
}
active =false;
return value;
}
};
}
var sum = tco(function(x, y){
if(y >0){
return sum(x +1, y -1)
}
else{
return x
}
});
sum(1,100000)
// 100001
10 回答11.1k 阅读
7 回答5.3k 阅读
6 回答3k 阅读
5 回答4.8k 阅读✓ 已解决
4 回答3.1k 阅读✓ 已解决
2 回答2.6k 阅读✓ 已解决
3 回答5.1k 阅读✓ 已解决
你哪里看的?https://baike.baidu.com/item/...
如果你是前端,那么其实知道有这个东西即可,浏览器只有短暂一段时间支持过,后面废弃了,未来估计也很难再支持了