Próbowałem zrozumieć Tail call optimization
w kontekście JavaScript i napisałem poniżej rekurencyjne i rekursywne metody ogonowania dla factorial()
.Czy funkcje JavaScript tail-call są zoptymalizowane?
rekurencyjne:
function factorial (n) {
if (n < 2) {
return 1;
} else {
return n * factorial(n-1);
}
}
Tail-rekurencyjne:
function factorial (n) {
function fact(n, acc) {
if (n < 2) {
return acc;
} else {
return fact(n-1, n * acc);
}
}
return fact(n, 1)
}
Ale nie jestem pewien, czy wersja funkcji tail-recursive
zostanie zoptymalizowany przez kompilator JavaScript jak to się robi w innych językach, takich jak Scala itp. Czy ktoś może mi pomóc w tej sprawie?
Linia 2 we fragmencie ogon rekurencyjna musi być 'Fakt funkcja (n, acc)' w celu podjęcia pracy. Dzięki za urywek, próbowałem to rozgryźć dzisiaj! –