Я пытаюсь понять Tail call optimization
в контексте JavaScript и написал ниже рекурсивные и хвосто-рекурсивные методы для factorial()
.
Рекурсивный:
function factorial (n) {
if (n < 2) {
return 1;
} else {
return n * factorial(n-1);
}
}
Tail-рекурсивный:
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 и т.д. Может ли кто-нибудь помочь мне на этом?