JS - Chapitre 07 - Recursion Flashcards
Tail call recursion
C’est quand la récursion se finit au dernier appel. Mais il faut une optimisation qui n’existe pas encore en JS
Exemple de tail call recursion
function factorial(n, result = 1) {
return (n==0) ?
result : factorial(n-1, n * result );
}
Exemple de recursion
function factorial(n) {
return (n===0)? 1: n*factorial(n-1);
}
Probleme de la récursion
Stack overflow
Technique du trampoline
Le tail call n’est pas possible, il faut trouver une alternative. C’est le trampoline:
Utilisation de thunk pour faire des méthodes sans paramètres qui renvoie des valeurs et avec une boucle
Problème tail call recursion
Pas d’optimisation qui existe dans le browser
Thunk
Fonction sans argument qui appelle une autre fonction avec des arguments et qui renvoie un résultat
Code de l’exemple SumAll avec thunks
function sumAll(n, i=0, result=0) { return (i < n) ? () => result
: () => sumAll(n, i+1, i + result);
}
const sum100Thunk = () => sumAll(100);
Code de la function trampoline
function trampoline(f) {
return function(…args) {
let result = f(…args);
while (typeof(result) === ‘function’) {
result = result();
}
return result;
}
}
Trampoline sur sumAll
const _sumAll = trampoline(sumAll);
console.log(_sumAll(10000));