Chapitre 07 - Recursion on lists Flashcards

1
Q

Qu’est-ce qu’il y a derrière toute les fonctions recursives

A

il y a une égalité récursive

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

comment envisager la récursivité

A

la solution d’un problème est égal à la solution d’un problème plus petit en recursion

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

Comment cela aide t’il à la conception de la récursion de connaitre l’équation d’égalité récursive

A

On se focalise sur le résultat voulue plut^tot que sur l’implémentation elle-même

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

Exemple d’égalité récursive

A

dernier de la liste Last(list) = Last(tail(list))
factorielle fact(n) = n * fact(n-1)

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

est-ce que l’égalité récursive est suffisante?

A

Non elle agit souvent sur un sous ensemble de données, il faut prendre en compte des valeurs extremes comme des listes vides

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

Exemple d’une structure de données fonctionnelle très adapté à la récursivité

A

Les listes sont construites selon une méthode récursive (head, tail => liste) donc très adapté à de la récursivité

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

Comment transformer une opération non-tail recursive en tail recursive

A

La solution est souvent de déclarer une fonction “interne” avec un accumulateur en nouveau paramètre

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

Exemple de transformation d’une fonction de list en tail recursive

A

length(list)
function addLength(list, length)
case nil => len
case _ :: tail => addLength(tail, length + 1)
addLength(list,0)

opposé à length
case nil => 0
case _ :: tail => 1 + length(tail)

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

Dans la transformation en tail recursive d’un accumulateur en forme de liste à quoi faut-il faire attention

A

Dans le cas d’un accumulateur de liste, il est préférable de construire la liste en ajoutant depuis le “front” pour éviter d’aller à la fin de la liste à chaque fois qui est une opération couteuse

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

Quelle est la bonne alternative, construire une liste en ordre inversé avec la méthode “front” ou faire une liste en ajoutant à la fin

A

Il est moins couteux de renverser une liste après avoir fait du front que d’avoir une liste parfaite avec la très couteuse insertion à la fin

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

Quelle technique permet de gérer des listes de grande taille impacté par l’immutabilité

A

On met dans les fonctions qui les traite des variables mutables pour éviter des couts de copie. Si la variable mutable est locale, la fonction reste pure

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