如果我可以使用命名递归函数,应该有一种tco匿名递归函数的方法。如果有一种方法,请解释如何在下面执行此操作是我的递归函数和TCO函数。如何在ES5中对递归匿名函数应用TCO(尾部调用优化)
function recursive(length, callback) {
tco((function (i, sum) {
var args = arguments;
if (i > length) {
console.log("break statement");
callback(sum)
return sum
} else {
return args.callee(i + 1, sum + i)
}
}))(0, 0)
}
function tco(f) {
var value;
var active = false;
var accumulated = [];
return function accumulator() {
accumulated.push(arguments);
if (!active) {
active = true;
while (accumulated.length) {
value = f.apply(this, accumulated.shift());
}
active = false;
return value;
}
}
}
我怀疑你能说出任何代码构建一个TCO(因为它是一个编译器/运行优化技术,不是你可以编码自己)。你的代码纠结了,但我猜测它只是某种奇怪的“蹦床”而已。 – zerkms
你为什么认为递归需要命名函数?看看'Y'组合器。 – Bergi
这与ES2015有什么关系?顺便说一句,所有的函数都已经在符合spec规范的ES6实现中进行tailrecursion优化,所以你不必自己实现任何东西。 – Bergi