JS - Chapitre 07 - Recursion Flashcards

1
Q

Tail call recursion

A

C’est quand la récursion se finit au dernier appel. Mais il faut une optimisation qui n’existe pas encore en JS

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

Exemple de tail call recursion

A

function factorial(n, result = 1) {
return (n==0) ?
result : factorial(n-1, n * result );
}

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

Exemple de recursion

A

function factorial(n) {
return (n===0)? 1: n*factorial(n-1);
}

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

Probleme de la récursion

A

Stack overflow

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

Technique du trampoline

A

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

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

Problème tail call recursion

A

Pas d’optimisation qui existe dans le browser

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

Thunk

A

Fonction sans argument qui appelle une autre fonction avec des arguments et qui renvoie un résultat

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

Code de l’exemple SumAll avec thunks

A

function sumAll(n, i=0, result=0) { return (i < n) ? () => result
: () => sumAll(n, i+1, i + result);
}

const sum100Thunk = () => sumAll(100);

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

Code de la function trampoline

A

function trampoline(f) {
return function(…args) {
let result = f(…args);
while (typeof(result) === ‘function’) {
result = result();
}
return result;
}
}

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

Trampoline sur sumAll

A

const _sumAll = trampoline(sumAll);
console.log(_sumAll(10000));

How well did you know this?
1
Not at all
2
3
4
5
Perfectly