Prise en main de CaML Light - 4 -...

94
Prise en main de CaML Light - 4 Lycée Thiers 2015 Prise en main de CaML Light - 4

Transcript of Prise en main de CaML Light - 4 -...

Page 1: Prise en main de CaML Light - 4 - INFO-MPSIinfo-mpsi.weebly.com/uploads/1/3/0/1/13014682/cours-4...Structures récursives mot: mot vide mot ^ lettre liste: liste vide [ ] élément

Prise en main de CaML Light - 4

Lycée Thiers 2015

Prise en main de CaML Light - 4

Page 2: Prise en main de CaML Light - 4 - INFO-MPSIinfo-mpsi.weebly.com/uploads/1/3/0/1/13014682/cours-4...Structures récursives mot: mot vide mot ^ lettre liste: liste vide [ ] élément

Récursivité

Prise en main de CaML Light - 4

Page 3: Prise en main de CaML Light - 4 - INFO-MPSIinfo-mpsi.weebly.com/uploads/1/3/0/1/13014682/cours-4...Structures récursives mot: mot vide mot ^ lettre liste: liste vide [ ] élément

Récursivité

Prise en main de CaML Light - 4

Page 4: Prise en main de CaML Light - 4 - INFO-MPSIinfo-mpsi.weebly.com/uploads/1/3/0/1/13014682/cours-4...Structures récursives mot: mot vide mot ^ lettre liste: liste vide [ ] élément

Récursivité

Prise en main de CaML Light - 4

Page 5: Prise en main de CaML Light - 4 - INFO-MPSIinfo-mpsi.weebly.com/uploads/1/3/0/1/13014682/cours-4...Structures récursives mot: mot vide mot ^ lettre liste: liste vide [ ] élément

Dans la nature aussi !

Prise en main de CaML Light - 4

Page 6: Prise en main de CaML Light - 4 - INFO-MPSIinfo-mpsi.weebly.com/uploads/1/3/0/1/13014682/cours-4...Structures récursives mot: mot vide mot ^ lettre liste: liste vide [ ] élément

Un modèle simplifié de végétal

Prise en main de CaML Light - 4

Page 7: Prise en main de CaML Light - 4 - INFO-MPSIinfo-mpsi.weebly.com/uploads/1/3/0/1/13014682/cours-4...Structures récursives mot: mot vide mot ^ lettre liste: liste vide [ ] élément

Un modèle simplifié de végétal

Prise en main de CaML Light - 4

Page 8: Prise en main de CaML Light - 4 - INFO-MPSIinfo-mpsi.weebly.com/uploads/1/3/0/1/13014682/cours-4...Structures récursives mot: mot vide mot ^ lettre liste: liste vide [ ] élément

Un modèle simplifié de végétal

Prise en main de CaML Light - 4

Page 9: Prise en main de CaML Light - 4 - INFO-MPSIinfo-mpsi.weebly.com/uploads/1/3/0/1/13014682/cours-4...Structures récursives mot: mot vide mot ^ lettre liste: liste vide [ ] élément

Un modèle simplifié de végétal

Prise en main de CaML Light - 4

Page 10: Prise en main de CaML Light - 4 - INFO-MPSIinfo-mpsi.weebly.com/uploads/1/3/0/1/13014682/cours-4...Structures récursives mot: mot vide mot ^ lettre liste: liste vide [ ] élément

Un modèle simplifié de végétal

Prise en main de CaML Light - 4

Page 11: Prise en main de CaML Light - 4 - INFO-MPSIinfo-mpsi.weebly.com/uploads/1/3/0/1/13014682/cours-4...Structures récursives mot: mot vide mot ^ lettre liste: liste vide [ ] élément

Structures récursives

mot :

mot videmot ^ lettre

liste :

liste vide [ ]élément : : liste

arbre binaire :

arbre vide

arbre arbre

objet

Prise en main de CaML Light - 4

Page 12: Prise en main de CaML Light - 4 - INFO-MPSIinfo-mpsi.weebly.com/uploads/1/3/0/1/13014682/cours-4...Structures récursives mot: mot vide mot ^ lettre liste: liste vide [ ] élément

Fonctions récursives

Factorielle (définition itérative) :

n! =n∏

k=1

k

Factorielle (définition récursive) :

0! = 1n! = n (n − 1)!

Fonction définie à partir d’elle-même ! ?

Prise en main de CaML Light - 4

Page 13: Prise en main de CaML Light - 4 - INFO-MPSIinfo-mpsi.weebly.com/uploads/1/3/0/1/13014682/cours-4...Structures récursives mot: mot vide mot ^ lettre liste: liste vide [ ] élément

Calcul récursif de n !

let rec fact n =if n = 0 then 1else n * (fact (n-1))

;;

Exemple : n = 5

5! = (0)

Prise en main de CaML Light - 4

Page 14: Prise en main de CaML Light - 4 - INFO-MPSIinfo-mpsi.weebly.com/uploads/1/3/0/1/13014682/cours-4...Structures récursives mot: mot vide mot ^ lettre liste: liste vide [ ] élément

Calcul récursif de n !

let rec fact n =if n = 0 then 1else n * (fact (n-1))

;;

Exemple : n = 5

5! = (0)

Prise en main de CaML Light - 4

Page 15: Prise en main de CaML Light - 4 - INFO-MPSIinfo-mpsi.weebly.com/uploads/1/3/0/1/13014682/cours-4...Structures récursives mot: mot vide mot ^ lettre liste: liste vide [ ] élément

Calcul récursif de n !

let rec fact n =if n = 0 then 1else n * (fact (n-1))

;;

Exemple : n = 5

5! = (0)

Prise en main de CaML Light - 4

Page 16: Prise en main de CaML Light - 4 - INFO-MPSIinfo-mpsi.weebly.com/uploads/1/3/0/1/13014682/cours-4...Structures récursives mot: mot vide mot ^ lettre liste: liste vide [ ] élément

Calcul récursif de n !

let rec fact n =if n = 0 then 1else n * (fact (n-1))

;;

Exemple : n = 5

5! = 5× 4!(0)

Prise en main de CaML Light - 4

Page 17: Prise en main de CaML Light - 4 - INFO-MPSIinfo-mpsi.weebly.com/uploads/1/3/0/1/13014682/cours-4...Structures récursives mot: mot vide mot ^ lettre liste: liste vide [ ] élément

Calcul récursif de n !

let rec fact n =if n = 0 then 1else n * (fact (n-1))

;;

Exemple : n = 5

5! = 5× (4× 3!)

Prise en main de CaML Light - 4

Page 18: Prise en main de CaML Light - 4 - INFO-MPSIinfo-mpsi.weebly.com/uploads/1/3/0/1/13014682/cours-4...Structures récursives mot: mot vide mot ^ lettre liste: liste vide [ ] élément

Calcul récursif de n !

let rec fact n =if n = 0 then 1else n * (fact (n-1))

;;

Exemple : n = 5

5! = 5× (4× (3× 2!))

Prise en main de CaML Light - 4

Page 19: Prise en main de CaML Light - 4 - INFO-MPSIinfo-mpsi.weebly.com/uploads/1/3/0/1/13014682/cours-4...Structures récursives mot: mot vide mot ^ lettre liste: liste vide [ ] élément

Calcul récursif de n !

let rec fact n =if n = 0 then 1else n * (fact (n-1))

;;

Exemple : n = 5

5! = 5× (4× (3× (2× 1!)))

Prise en main de CaML Light - 4

Page 20: Prise en main de CaML Light - 4 - INFO-MPSIinfo-mpsi.weebly.com/uploads/1/3/0/1/13014682/cours-4...Structures récursives mot: mot vide mot ^ lettre liste: liste vide [ ] élément

Calcul récursif de n !

let rec fact n =if n = 0 then 1else n * (fact (n-1))

;;

Exemple : n = 5

5! = 5× (4× (3× (2× (1× 0!))))

Prise en main de CaML Light - 4

Page 21: Prise en main de CaML Light - 4 - INFO-MPSIinfo-mpsi.weebly.com/uploads/1/3/0/1/13014682/cours-4...Structures récursives mot: mot vide mot ^ lettre liste: liste vide [ ] élément

Calcul récursif de n !

let rec fact n =if n = 0 then 1else n * (fact (n-1))

;;

Exemple : n = 5

5! = 5× (4× (3× (2× (1× 1))))

Prise en main de CaML Light - 4

Page 22: Prise en main de CaML Light - 4 - INFO-MPSIinfo-mpsi.weebly.com/uploads/1/3/0/1/13014682/cours-4...Structures récursives mot: mot vide mot ^ lettre liste: liste vide [ ] élément

Calcul récursif de n !

let rec fact n =if n = 0 then 1else n * (fact (n-1))

;;

Exemple : n = 5

5! = 5× (4× (3× (2× 1)))

Prise en main de CaML Light - 4

Page 23: Prise en main de CaML Light - 4 - INFO-MPSIinfo-mpsi.weebly.com/uploads/1/3/0/1/13014682/cours-4...Structures récursives mot: mot vide mot ^ lettre liste: liste vide [ ] élément

Calcul récursif de n !

let rec fact n =if n = 0 then 1else n * (fact (n-1))

;;

Exemple : n = 5

5! = 5× (4× (3× 2))

Prise en main de CaML Light - 4

Page 24: Prise en main de CaML Light - 4 - INFO-MPSIinfo-mpsi.weebly.com/uploads/1/3/0/1/13014682/cours-4...Structures récursives mot: mot vide mot ^ lettre liste: liste vide [ ] élément

Calcul récursif de n !

let rec fact n =if n = 0 then 1else n * (fact (n-1))

;;

Exemple : n = 5

5! = 5× (4× 6)

Prise en main de CaML Light - 4

Page 25: Prise en main de CaML Light - 4 - INFO-MPSIinfo-mpsi.weebly.com/uploads/1/3/0/1/13014682/cours-4...Structures récursives mot: mot vide mot ^ lettre liste: liste vide [ ] élément

Calcul récursif de n !

let rec fact n =if n = 0 then 1else n * (fact (n-1))

;;

Exemple : n = 5

5! = 5× 24

Prise en main de CaML Light - 4

Page 26: Prise en main de CaML Light - 4 - INFO-MPSIinfo-mpsi.weebly.com/uploads/1/3/0/1/13014682/cours-4...Structures récursives mot: mot vide mot ^ lettre liste: liste vide [ ] élément

Calcul récursif de n !

let rec fact n =if n = 0 then 1else n * (fact (n-1))

;;

Exemple : n = 5

5! = 120

Prise en main de CaML Light - 4

Page 27: Prise en main de CaML Light - 4 - INFO-MPSIinfo-mpsi.weebly.com/uploads/1/3/0/1/13014682/cours-4...Structures récursives mot: mot vide mot ^ lettre liste: liste vide [ ] élément

Empilement / dépilement

Prise en main de CaML Light - 4

Page 28: Prise en main de CaML Light - 4 - INFO-MPSIinfo-mpsi.weebly.com/uploads/1/3/0/1/13014682/cours-4...Structures récursives mot: mot vide mot ^ lettre liste: liste vide [ ] élément

Empilement / dépilement

acheter du pain

Prise en main de CaML Light - 4

Page 29: Prise en main de CaML Light - 4 - INFO-MPSIinfo-mpsi.weebly.com/uploads/1/3/0/1/13014682/cours-4...Structures récursives mot: mot vide mot ^ lettre liste: liste vide [ ] élément

Empilement / dépilement

cadeau d’anniversaire

Prise en main de CaML Light - 4

Page 30: Prise en main de CaML Light - 4 - INFO-MPSIinfo-mpsi.weebly.com/uploads/1/3/0/1/13014682/cours-4...Structures récursives mot: mot vide mot ^ lettre liste: liste vide [ ] élément

Empilement / dépilement

retirer des sous

Prise en main de CaML Light - 4

Page 31: Prise en main de CaML Light - 4 - INFO-MPSIinfo-mpsi.weebly.com/uploads/1/3/0/1/13014682/cours-4...Structures récursives mot: mot vide mot ^ lettre liste: liste vide [ ] élément

Empilement / dépilement

prendre la voiture

Prise en main de CaML Light - 4

Page 32: Prise en main de CaML Light - 4 - INFO-MPSIinfo-mpsi.weebly.com/uploads/1/3/0/1/13014682/cours-4...Structures récursives mot: mot vide mot ^ lettre liste: liste vide [ ] élément

Empilement / dépilement

aller chercher les clefs

Prise en main de CaML Light - 4

Page 33: Prise en main de CaML Light - 4 - INFO-MPSIinfo-mpsi.weebly.com/uploads/1/3/0/1/13014682/cours-4...Structures récursives mot: mot vide mot ^ lettre liste: liste vide [ ] élément

Empilement / dépilement

Prise en main de CaML Light - 4

Page 34: Prise en main de CaML Light - 4 - INFO-MPSIinfo-mpsi.weebly.com/uploads/1/3/0/1/13014682/cours-4...Structures récursives mot: mot vide mot ^ lettre liste: liste vide [ ] élément

Empilement / dépilement

Prise en main de CaML Light - 4

Page 35: Prise en main de CaML Light - 4 - INFO-MPSIinfo-mpsi.weebly.com/uploads/1/3/0/1/13014682/cours-4...Structures récursives mot: mot vide mot ^ lettre liste: liste vide [ ] élément

Empilement / dépilement

Prise en main de CaML Light - 4

Page 36: Prise en main de CaML Light - 4 - INFO-MPSIinfo-mpsi.weebly.com/uploads/1/3/0/1/13014682/cours-4...Structures récursives mot: mot vide mot ^ lettre liste: liste vide [ ] élément

Empilement / dépilement

Prise en main de CaML Light - 4

Page 37: Prise en main de CaML Light - 4 - INFO-MPSIinfo-mpsi.weebly.com/uploads/1/3/0/1/13014682/cours-4...Structures récursives mot: mot vide mot ^ lettre liste: liste vide [ ] élément

Empilement / dépilement

Prise en main de CaML Light - 4

Page 38: Prise en main de CaML Light - 4 - INFO-MPSIinfo-mpsi.weebly.com/uploads/1/3/0/1/13014682/cours-4...Structures récursives mot: mot vide mot ^ lettre liste: liste vide [ ] élément

Récursion dans le langage

Sie gehen ins Kino, weil sie einen film sehen wollen.

Trop de niveaux refoulés→ phrase incompréhensible !

Le phénomène allemand bien connu du rejet du verbeà la fin, sur lequel des histoires drôles de professeursqui commencent une phrase, sautent d’un sujet à unautre pendant tout le cours, et finissent par débiterune série de verbes auxquels le public, pour qui lapile a depuis longtemps perdu toute cohérence, necomprend plus rien, circulent dans tous les couloirsd’université, est un excellent exemple.

Gödel, Escher, Bach : les brins d’une guirlande éternelle[an eternal golden braid]Douglas Hofstadter

Prise en main de CaML Light - 4

Page 39: Prise en main de CaML Light - 4 - INFO-MPSIinfo-mpsi.weebly.com/uploads/1/3/0/1/13014682/cours-4...Structures récursives mot: mot vide mot ^ lettre liste: liste vide [ ] élément

Une pile d’assiettes ...

sommet

dépilerempiler

Prise en main de CaML Light - 4

Page 40: Prise en main de CaML Light - 4 - INFO-MPSIinfo-mpsi.weebly.com/uploads/1/3/0/1/13014682/cours-4...Structures récursives mot: mot vide mot ^ lettre liste: liste vide [ ] élément

Calcul de xn : récursion

let rec puissance x n =if n = 0 then 1else x * (puissance x (n-1))

;;

Exemple : x = 3, n = 5

35(35

)5 multiplications + gestion de la pile

Prise en main de CaML Light - 4

Page 41: Prise en main de CaML Light - 4 - INFO-MPSIinfo-mpsi.weebly.com/uploads/1/3/0/1/13014682/cours-4...Structures récursives mot: mot vide mot ^ lettre liste: liste vide [ ] élément

Calcul de xn : récursion

let rec puissance x n =if n = 0 then 1else x * (puissance x (n-1))

;;

Exemple : x = 3, n = 5

35(35

)5 multiplications + gestion de la pile

Prise en main de CaML Light - 4

Page 42: Prise en main de CaML Light - 4 - INFO-MPSIinfo-mpsi.weebly.com/uploads/1/3/0/1/13014682/cours-4...Structures récursives mot: mot vide mot ^ lettre liste: liste vide [ ] élément

Calcul de xn : récursion

let rec puissance x n =if n = 0 then 1else x * (puissance x (n-1))

;;

Exemple : x = 3, n = 5

35(35

)

5 multiplications + gestion de la pile

Prise en main de CaML Light - 4

Page 43: Prise en main de CaML Light - 4 - INFO-MPSIinfo-mpsi.weebly.com/uploads/1/3/0/1/13014682/cours-4...Structures récursives mot: mot vide mot ^ lettre liste: liste vide [ ] élément

Calcul de xn : récursion

let rec puissance x n =if n = 0 then 1else x * (puissance x (n-1))

;;

Exemple : x = 3, n = 5

35 =(35

)

5 multiplications + gestion de la pile

Prise en main de CaML Light - 4

Page 44: Prise en main de CaML Light - 4 - INFO-MPSIinfo-mpsi.weebly.com/uploads/1/3/0/1/13014682/cours-4...Structures récursives mot: mot vide mot ^ lettre liste: liste vide [ ] élément

Calcul de xn : récursion

let rec puissance x n =if n = 0 then 1else x * (puissance x (n-1))

;;

Exemple : x = 3, n = 5

35 = 3× 34(35

)

5 multiplications + gestion de la pile

Prise en main de CaML Light - 4

Page 45: Prise en main de CaML Light - 4 - INFO-MPSIinfo-mpsi.weebly.com/uploads/1/3/0/1/13014682/cours-4...Structures récursives mot: mot vide mot ^ lettre liste: liste vide [ ] élément

Calcul de xn : récursion

let rec puissance x n =if n = 0 then 1else x * (puissance x (n-1))

;;

Exemple : x = 3, n = 5

35 = 3×(3× 33

)

5 multiplications + gestion de la pile

Prise en main de CaML Light - 4

Page 46: Prise en main de CaML Light - 4 - INFO-MPSIinfo-mpsi.weebly.com/uploads/1/3/0/1/13014682/cours-4...Structures récursives mot: mot vide mot ^ lettre liste: liste vide [ ] élément

Calcul de xn : récursion

let rec puissance x n =if n = 0 then 1else x * (puissance x (n-1))

;;

Exemple : x = 3, n = 5

35 = 3×(3×

(3× 32

))

5 multiplications + gestion de la pile

Prise en main de CaML Light - 4

Page 47: Prise en main de CaML Light - 4 - INFO-MPSIinfo-mpsi.weebly.com/uploads/1/3/0/1/13014682/cours-4...Structures récursives mot: mot vide mot ^ lettre liste: liste vide [ ] élément

Calcul de xn : récursion

let rec puissance x n =if n = 0 then 1else x * (puissance x (n-1))

;;

Exemple : x = 3, n = 5

35 = 3×(3×

(3×

(3× 31

)))

5 multiplications + gestion de la pile

Prise en main de CaML Light - 4

Page 48: Prise en main de CaML Light - 4 - INFO-MPSIinfo-mpsi.weebly.com/uploads/1/3/0/1/13014682/cours-4...Structures récursives mot: mot vide mot ^ lettre liste: liste vide [ ] élément

Calcul de xn : récursion

let rec puissance x n =if n = 0 then 1else x * (puissance x (n-1))

;;

Exemple : x = 3, n = 5

35 = 3× (3× (3× (3× (3× 1))))(35

)

5 multiplications + gestion de la pile

Prise en main de CaML Light - 4

Page 49: Prise en main de CaML Light - 4 - INFO-MPSIinfo-mpsi.weebly.com/uploads/1/3/0/1/13014682/cours-4...Structures récursives mot: mot vide mot ^ lettre liste: liste vide [ ] élément

Calcul de xn : récursion

let rec puissance x n =if n = 0 then 1else x * (puissance x (n-1))

;;

Exemple : x = 3, n = 5

35 = 3× (3× (3× (3× 3)))(35

)

5 multiplications + gestion de la pile

Prise en main de CaML Light - 4

Page 50: Prise en main de CaML Light - 4 - INFO-MPSIinfo-mpsi.weebly.com/uploads/1/3/0/1/13014682/cours-4...Structures récursives mot: mot vide mot ^ lettre liste: liste vide [ ] élément

Calcul de xn : récursion

let rec puissance x n =if n = 0 then 1else x * (puissance x (n-1))

;;

Exemple : x = 3, n = 5

35 = 3× (3× (3× 9))(35

)

5 multiplications + gestion de la pile

Prise en main de CaML Light - 4

Page 51: Prise en main de CaML Light - 4 - INFO-MPSIinfo-mpsi.weebly.com/uploads/1/3/0/1/13014682/cours-4...Structures récursives mot: mot vide mot ^ lettre liste: liste vide [ ] élément

Calcul de xn : récursion

let rec puissance x n =if n = 0 then 1else x * (puissance x (n-1))

;;

Exemple : x = 3, n = 5

35 = 3× (3× 27)(35

)

5 multiplications + gestion de la pile

Prise en main de CaML Light - 4

Page 52: Prise en main de CaML Light - 4 - INFO-MPSIinfo-mpsi.weebly.com/uploads/1/3/0/1/13014682/cours-4...Structures récursives mot: mot vide mot ^ lettre liste: liste vide [ ] élément

Calcul de xn : récursion

let rec puissance x n =if n = 0 then 1else x * (puissance x (n-1))

;;

Exemple : x = 3, n = 5

35 = 3× 81(35

)

5 multiplications + gestion de la pile

Prise en main de CaML Light - 4

Page 53: Prise en main de CaML Light - 4 - INFO-MPSIinfo-mpsi.weebly.com/uploads/1/3/0/1/13014682/cours-4...Structures récursives mot: mot vide mot ^ lettre liste: liste vide [ ] élément

Calcul de xn : récursion

let rec puissance x n =if n = 0 then 1else x * (puissance x (n-1))

;;

Exemple : x = 3, n = 5

35 = 243(35

)

5 multiplications + gestion de la pile

Prise en main de CaML Light - 4

Page 54: Prise en main de CaML Light - 4 - INFO-MPSIinfo-mpsi.weebly.com/uploads/1/3/0/1/13014682/cours-4...Structures récursives mot: mot vide mot ^ lettre liste: liste vide [ ] élément

Calcul de xn : récursion

let rec puissance x n =if n = 0 then 1else x * (puissance x (n-1))

;;

Exemple : x = 3, n = 5

35 = 243(35

)5 multiplications + gestion de la pile

Prise en main de CaML Light - 4

Page 55: Prise en main de CaML Light - 4 - INFO-MPSIinfo-mpsi.weebly.com/uploads/1/3/0/1/13014682/cours-4...Structures récursives mot: mot vide mot ^ lettre liste: liste vide [ ] élément

Calcul de xn : récursion terminale

let puissance x n =aux 1 n whererec aux pp n =if n = 0 then ppelse aux (x * pp) (n-1)

;;

Exemple : x = 3, n = 5

35

5 multiplications + “récursion sans pile”

Prise en main de CaML Light - 4

Page 56: Prise en main de CaML Light - 4 - INFO-MPSIinfo-mpsi.weebly.com/uploads/1/3/0/1/13014682/cours-4...Structures récursives mot: mot vide mot ^ lettre liste: liste vide [ ] élément

Calcul de xn : récursion terminale

let puissance x n =aux 1 n whererec aux pp n =if n = 0 then ppelse aux (x * pp) (n-1)

;;

Exemple : x = 3, n = 5

35

5 multiplications + “récursion sans pile”

Prise en main de CaML Light - 4

Page 57: Prise en main de CaML Light - 4 - INFO-MPSIinfo-mpsi.weebly.com/uploads/1/3/0/1/13014682/cours-4...Structures récursives mot: mot vide mot ^ lettre liste: liste vide [ ] élément

Calcul de xn : récursion terminale

let puissance x n =aux 1 n whererec aux pp n =if n = 0 then ppelse aux (x * pp) (n-1)

;;

Exemple : x = 3, n = 5

35

5 multiplications + “récursion sans pile”

Prise en main de CaML Light - 4

Page 58: Prise en main de CaML Light - 4 - INFO-MPSIinfo-mpsi.weebly.com/uploads/1/3/0/1/13014682/cours-4...Structures récursives mot: mot vide mot ^ lettre liste: liste vide [ ] élément

Calcul de xn : récursion terminale

let puissance x n =aux 1 n whererec aux pp n =if n = 0 then ppelse aux (x * pp) (n-1)

;;

Exemple : x = 3, n = 5

35 =

5 multiplications + “récursion sans pile”

Prise en main de CaML Light - 4

Page 59: Prise en main de CaML Light - 4 - INFO-MPSIinfo-mpsi.weebly.com/uploads/1/3/0/1/13014682/cours-4...Structures récursives mot: mot vide mot ^ lettre liste: liste vide [ ] élément

Calcul de xn : récursion terminale

let puissance x n =aux 1 n whererec aux pp n =if n = 0 then ppelse aux (x * pp) (n-1)

;;

Exemple : x = 3, n = 5

35 = aux 1 5

5 multiplications + “récursion sans pile”

Prise en main de CaML Light - 4

Page 60: Prise en main de CaML Light - 4 - INFO-MPSIinfo-mpsi.weebly.com/uploads/1/3/0/1/13014682/cours-4...Structures récursives mot: mot vide mot ^ lettre liste: liste vide [ ] élément

Calcul de xn : récursion terminale

let puissance x n =aux 1 n whererec aux pp n =if n = 0 then ppelse aux (x * pp) (n-1)

;;

Exemple : x = 3, n = 5

35 = aux 3 4

5 multiplications + “récursion sans pile”

Prise en main de CaML Light - 4

Page 61: Prise en main de CaML Light - 4 - INFO-MPSIinfo-mpsi.weebly.com/uploads/1/3/0/1/13014682/cours-4...Structures récursives mot: mot vide mot ^ lettre liste: liste vide [ ] élément

Calcul de xn : récursion terminale

let puissance x n =aux 1 n whererec aux pp n =if n = 0 then ppelse aux (x * pp) (n-1)

;;

Exemple : x = 3, n = 5

35 = aux 9 3

5 multiplications + “récursion sans pile”

Prise en main de CaML Light - 4

Page 62: Prise en main de CaML Light - 4 - INFO-MPSIinfo-mpsi.weebly.com/uploads/1/3/0/1/13014682/cours-4...Structures récursives mot: mot vide mot ^ lettre liste: liste vide [ ] élément

Calcul de xn : récursion terminale

let puissance x n =aux 1 n whererec aux pp n =if n = 0 then ppelse aux (x * pp) (n-1)

;;

Exemple : x = 3, n = 5

35 = aux 27 2

5 multiplications + “récursion sans pile”

Prise en main de CaML Light - 4

Page 63: Prise en main de CaML Light - 4 - INFO-MPSIinfo-mpsi.weebly.com/uploads/1/3/0/1/13014682/cours-4...Structures récursives mot: mot vide mot ^ lettre liste: liste vide [ ] élément

Calcul de xn : récursion terminale

let puissance x n =aux 1 n whererec aux pp n =if n = 0 then ppelse aux (x * pp) (n-1)

;;

Exemple : x = 3, n = 5

35 = aux 81 1

5 multiplications + “récursion sans pile”

Prise en main de CaML Light - 4

Page 64: Prise en main de CaML Light - 4 - INFO-MPSIinfo-mpsi.weebly.com/uploads/1/3/0/1/13014682/cours-4...Structures récursives mot: mot vide mot ^ lettre liste: liste vide [ ] élément

Calcul de xn : récursion terminale

let puissance x n =aux 1 n whererec aux pp n =if n = 0 then ppelse aux (x * pp) (n-1)

;;

Exemple : x = 3, n = 5

35 = aux 243 0

5 multiplications + “récursion sans pile”

Prise en main de CaML Light - 4

Page 65: Prise en main de CaML Light - 4 - INFO-MPSIinfo-mpsi.weebly.com/uploads/1/3/0/1/13014682/cours-4...Structures récursives mot: mot vide mot ^ lettre liste: liste vide [ ] élément

Calcul de xn : récursion terminale

let puissance x n =aux 1 n whererec aux pp n =if n = 0 then ppelse aux (x * pp) (n-1)

;;

Exemple : x = 3, n = 5

35 = 243

5 multiplications + “récursion sans pile”

Prise en main de CaML Light - 4

Page 66: Prise en main de CaML Light - 4 - INFO-MPSIinfo-mpsi.weebly.com/uploads/1/3/0/1/13014682/cours-4...Structures récursives mot: mot vide mot ^ lettre liste: liste vide [ ] élément

Calcul de xn : récursion terminale

let puissance x n =aux 1 n whererec aux pp n =if n = 0 then ppelse aux (x * pp) (n-1)

;;

Exemple : x = 3, n = 5

35 = 243

5 multiplications + “récursion sans pile”

Prise en main de CaML Light - 4

Page 67: Prise en main de CaML Light - 4 - INFO-MPSIinfo-mpsi.weebly.com/uploads/1/3/0/1/13014682/cours-4...Structures récursives mot: mot vide mot ^ lettre liste: liste vide [ ] élément

Exponentiation rapide - Exemple : x27

x27 = x(x13

)2

x13 = x(x6

)2

x6 =(x3

)2

x3 = x x2

Prise en main de CaML Light - 4

Page 68: Prise en main de CaML Light - 4 - INFO-MPSIinfo-mpsi.weebly.com/uploads/1/3/0/1/13014682/cours-4...Structures récursives mot: mot vide mot ^ lettre liste: liste vide [ ] élément

Exponentiation rapide - Exemple : x27

x27 = x(x13

)2→2

x13 = x(x6

)2→2

x6 =(x3

)2→1

x3 = x x2→2

Prise en main de CaML Light - 4

Page 69: Prise en main de CaML Light - 4 - INFO-MPSIinfo-mpsi.weebly.com/uploads/1/3/0/1/13014682/cours-4...Structures récursives mot: mot vide mot ^ lettre liste: liste vide [ ] élément

Exponentiation rapide - Exemple : x27

x27 = x(x13

)2→2

x13 = x(x6

)2→2

x6 =(x3

)2→1

x3 = x x2→2

Prise en main de CaML Light - 4

Page 70: Prise en main de CaML Light - 4 - INFO-MPSIinfo-mpsi.weebly.com/uploads/1/3/0/1/13014682/cours-4...Structures récursives mot: mot vide mot ^ lettre liste: liste vide [ ] élément

Exponentiation rapide - Exemple : x27

x27 = x(x13

)2→2

x13 = x(x6

)2→2

x6 =(x3

)2→1

x3 = x x2→2

Prise en main de CaML Light - 4

Page 71: Prise en main de CaML Light - 4 - INFO-MPSIinfo-mpsi.weebly.com/uploads/1/3/0/1/13014682/cours-4...Structures récursives mot: mot vide mot ^ lettre liste: liste vide [ ] élément

Exponentiation rapide - Exemple : x27

x27 = x(x13

)2→2

x13 = x(x6

)2→2

x6 =(x3

)2→1

x3 = x x2→2

Prise en main de CaML Light - 4

Page 72: Prise en main de CaML Light - 4 - INFO-MPSIinfo-mpsi.weebly.com/uploads/1/3/0/1/13014682/cours-4...Structures récursives mot: mot vide mot ^ lettre liste: liste vide [ ] élément

Exponentiation rapide - Exemple : x27

x27 = x(x13

)2→2

x13 = x(x6

)2→2

x6 =(x3

)2→1

x3 = x x2→2

Prise en main de CaML Light - 4

Page 73: Prise en main de CaML Light - 4 - INFO-MPSIinfo-mpsi.weebly.com/uploads/1/3/0/1/13014682/cours-4...Structures récursives mot: mot vide mot ^ lettre liste: liste vide [ ] élément

Exponentiation rapide - Exemple : x27

x27 = x(x13

)2→2

x13 = x(x6

)2→2

x6 =(x3

)2→1

x3 = x x2→2

Prise en main de CaML Light - 4

Page 74: Prise en main de CaML Light - 4 - INFO-MPSIinfo-mpsi.weebly.com/uploads/1/3/0/1/13014682/cours-4...Structures récursives mot: mot vide mot ^ lettre liste: liste vide [ ] élément

Exponentiation rapide - Exemple : x27

x27 = x(x13

)2→2

x13 = x(x6

)2→2

x6 =(x3

)2→1

x3 = x x2→2

Prise en main de CaML Light - 4

Page 75: Prise en main de CaML Light - 4 - INFO-MPSIinfo-mpsi.weebly.com/uploads/1/3/0/1/13014682/cours-4...Structures récursives mot: mot vide mot ^ lettre liste: liste vide [ ] élément

Exponentiation rapide - Exemple : x27

x27 = x(x13

)2→2

x13 = x(x6

)2→2

x6 =(x3

)2→1

x3 = x x2→2

Prise en main de CaML Light - 4

Page 76: Prise en main de CaML Light - 4 - INFO-MPSIinfo-mpsi.weebly.com/uploads/1/3/0/1/13014682/cours-4...Structures récursives mot: mot vide mot ^ lettre liste: liste vide [ ] élément

Exponentiation rapide - Exemple : x27

x27 = x(x13

)2→2

x13 = x(x6

)2→2

x6 =(x3

)2→1

x3 = x x2→2

Coût total = 7 multiplications

Prise en main de CaML Light - 4

Page 77: Prise en main de CaML Light - 4 - INFO-MPSIinfo-mpsi.weebly.com/uploads/1/3/0/1/13014682/cours-4...Structures récursives mot: mot vide mot ^ lettre liste: liste vide [ ] élément

Calcul de xn : exponentiation rapide

∀n ∈N?, xn =

(xn/2

)2si n pair

x(x(n−1)/2

)2sinon

T (1) = 0 T (n) = T(⌊n

2

⌋)+ 1 + (n mod 2)

T (n) =⌊log2 (n)

⌋+ σn − 1

log2 (n) 6 T (n) 6 2 log2 (n)

Prise en main de CaML Light - 4

Page 78: Prise en main de CaML Light - 4 - INFO-MPSIinfo-mpsi.weebly.com/uploads/1/3/0/1/13014682/cours-4...Structures récursives mot: mot vide mot ^ lettre liste: liste vide [ ] élément

Exponentiation rapide

Retour à l’exemple :

x27 calculé avec 7 multiplications ...

T (27) =⌊log2 (27)

⌋+ σ27 − 1

16 = 24 < 27 < 25 = 32⇒⌊log2 (27)

⌋= 4

27 = 110112 ⇒ σ27 = 4

T (27) = 7

Prise en main de CaML Light - 4

Page 79: Prise en main de CaML Light - 4 - INFO-MPSIinfo-mpsi.weebly.com/uploads/1/3/0/1/13014682/cours-4...Structures récursives mot: mot vide mot ^ lettre liste: liste vide [ ] élément

Calcul de xn : on récapitule ...

1 version itérative

2 version récursive

3 version récursive terminale

4 exponentiation rapide

Prise en main de CaML Light - 4

Page 80: Prise en main de CaML Light - 4 - INFO-MPSIinfo-mpsi.weebly.com/uploads/1/3/0/1/13014682/cours-4...Structures récursives mot: mot vide mot ^ lettre liste: liste vide [ ] élément

Remplissage d’un damier 2n× 2n

Prise en main de CaML Light - 4

Page 81: Prise en main de CaML Light - 4 - INFO-MPSIinfo-mpsi.weebly.com/uploads/1/3/0/1/13014682/cours-4...Structures récursives mot: mot vide mot ^ lettre liste: liste vide [ ] élément

Remplissage d’un damier 2n× 2n

Prise en main de CaML Light - 4

Page 82: Prise en main de CaML Light - 4 - INFO-MPSIinfo-mpsi.weebly.com/uploads/1/3/0/1/13014682/cours-4...Structures récursives mot: mot vide mot ^ lettre liste: liste vide [ ] élément

Remplissage d’un damier 2n× 2n

Peut-on recouvrir le damier entier ?

C’est impossible, car ...

4n . 0 [3]

Et si on enlève une case ?

4n− 1 ≡ 0 [3]

ça peut marcher ... mais ce n’est pas garanti a priori !

D’ailleurs, voici un exemple classique ... (page suivante)

Prise en main de CaML Light - 4

Page 83: Prise en main de CaML Light - 4 - INFO-MPSIinfo-mpsi.weebly.com/uploads/1/3/0/1/13014682/cours-4...Structures récursives mot: mot vide mot ^ lettre liste: liste vide [ ] élément

Damier (2n) × (2n) et dominos

Prise en main de CaML Light - 4

Page 84: Prise en main de CaML Light - 4 - INFO-MPSIinfo-mpsi.weebly.com/uploads/1/3/0/1/13014682/cours-4...Structures récursives mot: mot vide mot ^ lettre liste: liste vide [ ] élément

Damier (2n) × (2n) et dominos

Prise en main de CaML Light - 4

Page 85: Prise en main de CaML Light - 4 - INFO-MPSIinfo-mpsi.weebly.com/uploads/1/3/0/1/13014682/cours-4...Structures récursives mot: mot vide mot ^ lettre liste: liste vide [ ] élément

Damier (2n) × (2n) et dominos

Prise en main de CaML Light - 4

Page 86: Prise en main de CaML Light - 4 - INFO-MPSIinfo-mpsi.weebly.com/uploads/1/3/0/1/13014682/cours-4...Structures récursives mot: mot vide mot ^ lettre liste: liste vide [ ] élément

Damier (2n) × (2n) et dominos

Prise en main de CaML Light - 4

Page 87: Prise en main de CaML Light - 4 - INFO-MPSIinfo-mpsi.weebly.com/uploads/1/3/0/1/13014682/cours-4...Structures récursives mot: mot vide mot ^ lettre liste: liste vide [ ] élément

Damier (2n) × (2n) et dominos

Etant donné un damier de format (2n) × (2n) duquel on aretiré deux cases diagonalement opposées, il estimpossible de recouvrir ce qui reste à l’aide de dominos(chaque domino pouvant recouvrir deux cases,horizontalement ou bien verticalement).

En effet, chaque domino recouvre une case blanche etune case noire, or les deux cases supprimées étaient dela même couleur !

Prise en main de CaML Light - 4

Page 88: Prise en main de CaML Light - 4 - INFO-MPSIinfo-mpsi.weebly.com/uploads/1/3/0/1/13014682/cours-4...Structures récursives mot: mot vide mot ^ lettre liste: liste vide [ ] élément

Damier 2n× 2n privé d’une case (reprise)

Prise en main de CaML Light - 4

Page 89: Prise en main de CaML Light - 4 - INFO-MPSIinfo-mpsi.weebly.com/uploads/1/3/0/1/13014682/cours-4...Structures récursives mot: mot vide mot ^ lettre liste: liste vide [ ] élément

Damier 2n× 2n privé d’une case (reprise)

Prise en main de CaML Light - 4

Page 90: Prise en main de CaML Light - 4 - INFO-MPSIinfo-mpsi.weebly.com/uploads/1/3/0/1/13014682/cours-4...Structures récursives mot: mot vide mot ^ lettre liste: liste vide [ ] élément

Damier 2n× 2n privé d’une case (reprise)

Prise en main de CaML Light - 4

Page 91: Prise en main de CaML Light - 4 - INFO-MPSIinfo-mpsi.weebly.com/uploads/1/3/0/1/13014682/cours-4...Structures récursives mot: mot vide mot ^ lettre liste: liste vide [ ] élément

Damier 2n× 2n privé d’une case (reprise)

Prise en main de CaML Light - 4

Page 92: Prise en main de CaML Light - 4 - INFO-MPSIinfo-mpsi.weebly.com/uploads/1/3/0/1/13014682/cours-4...Structures récursives mot: mot vide mot ^ lettre liste: liste vide [ ] élément

Damier 2n× 2n privé d’une case

Solution récursive pour le problème à l’ordre n :

Si n = 1, c’est évident !Si n > 2 :

on partage en 4 damiers 2n−1× 2n−1

on place un ’L’ au centre avec la bonne orientationon résout 4 problèmes à l’ordre n − 1

Prise en main de CaML Light - 4

Page 93: Prise en main de CaML Light - 4 - INFO-MPSIinfo-mpsi.weebly.com/uploads/1/3/0/1/13014682/cours-4...Structures récursives mot: mot vide mot ^ lettre liste: liste vide [ ] élément

Damier 2n× 2n privé d’une case

Prise en main de CaML Light - 4

Page 94: Prise en main de CaML Light - 4 - INFO-MPSIinfo-mpsi.weebly.com/uploads/1/3/0/1/13014682/cours-4...Structures récursives mot: mot vide mot ^ lettre liste: liste vide [ ] élément

Damier 2n× 2n privé d’une case

Prise en main de CaML Light - 4