私はJavaScriptの文脈でTail call optimization
を理解しようとしており、factorial()
の以下の再帰的および末尾再帰的なメソッドを書いています。JavaScriptテールコールの関数は最適化されていますか?
再帰:
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のような他の言語でも使えます。
2行目末尾再帰スニペットで、 '動作するための関数事実(nは、ACC)'する必要があります。 スニペットをありがとう、私は今日これを理解しようとしていました! –