ES 6関数尾調合caler
661 ワード
function factorial(n, total=1) {
if (factorial.caller !== factorial && arguments.length >1)
throw new Error('only one param');
if (n < 3) return n*total;
return factorial(n - 1, n * total);
}
最近ES 6を勉強しています.関数の最後の調整という新しい特性を見て、関数の再帰的な呼び出しにとても役に立ちました.再帰的呼び出しアルゴリズムは簡単に書くことができますが、効率はあまり良くないです.しかし、もし最終調整を使ったら効率が高いです.上は階乗の再帰尾調です.JSが支持すれば断言はもっと簡単です.function factorial(n, total=1) {
if (factorial.caller !== factorial)
assert(arguments.length === 1, 'only one param');
if (n < 3) return n*total;
return factorial(n - 1, n * total);
}
注意:factoral.callerはargments.callerを使用できません.