名前付き再帰関数を呼び出すことができれば、匿名再帰関数を呼び出すことができます。方法がある場合は、私の再帰関数とTCO関数です。ES5の再帰匿名関数にTCO(Tail Call Optimiztion)を適用するには
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と何が関係していますか? Btwでは、すべての関数がspec準拠のES6実装でテール再帰のために最適化されているため、何も実装する必要はありません。 – Bergi