JavaScriptのコンテキストで_Tail call optimization
_を理解しようとしており、factorial()
の再帰的および末尾再帰的なメソッドを以下に記述しました。
再帰:
_function factorial (n) {
if (n < 2) {
return 1;
} else {
return n * factorial(n-1);
}
}
_
末尾再帰:
_function factorial (n) {
function fact(n, acc) {
if (n < 2) {
return acc;
} else {
return fact(n-1, n * acc);
}
}
return fact(n, 1)
}
_
しかし、関数の_tail-recursive
_バージョンがJavaScriptコンパイラーによってScalaなどのような他の言語で行われるように最適化されるかどうかはわかりません。 ?
理論的にははい。他の答えの状態として。
しかし実際には、2017年7月の時点で、いいえ。Safariのみがサポートしています。
Javascript ES6(ES2015)の互換性: https://kangax.github.io/compat-table/es6/