J'ai essayé de comprendre Tail call optimization
Dans le contexte de JavaScript et j'ai écrit les méthodes ci-dessous récursives et récursives pour factorial()
.
Récursif:
function factorial (n) {
if (n < 2) {
return 1;
} else {
return n * factorial(n-1);
}
}
queue-récursive:
function factorial (n) {
function fact(n, acc) {
if (n < 2) {
return acc;
} else {
return fact(n-1, n * acc);
}
}
return fact(n, 1)
}
Mais je ne suis pas sûr que la version tail-recursive
De la fonction soit optimisée par le compilateur JavaScript, comme c'est le cas dans d'autres langues comme Scala etc.). Quelqu'un peut-il m'aider à ce sujet? une?
Mise à jour: à compter du 13 mars 2018, Safari est le seul navigateur qui prend en charge l'optimisation des appels en aval.
L'équipe Chrome indique explicitement que l'optimisation d'appel final n'est pas en cours de développement et peut être suivie ici .
L’implémentation pour Firefox peut être suivie ici
Message original
Oui, ES2015 offre une optimisation des appels en aval en mode strict. Le Dr. Axel Rauschmayer l'exprime magnifiquement sur le lien ci-dessous, je ne répéterai donc pas ses mots ici.
Remarque: ES 5 n'optimise pas les appels finaux.
En théorie oui. Comme l'indique l'autre réponse.
En pratique cependant, à compter de juillet 2017, seul Safari le prend en charge.
Compatibilité Javascript ES6 (ES2015): https://kangax.github.io/compat-table/es6/