You are on page 1of 41

Algorithmes récursifs

Licence 1 MASS - Algorithmique et Calcul Formel

S. Verel, M.-E. Voge


www.i3s.unice.fr/∼verel

23 mars 2007
Principe de la récursivité
Algorithmes récursifs
Résolution de problèmes par récursivité

Objectifs de la séance 3

écrire des algorithmes récursifs avec un seul test


rechercher un élément dans un tableau par dichotomie
récursivement

Questions principales du jour :


Comment écrire ce que l’on ne connait pas encore ?

S. Verel, M.-E. Voge Algorithmes récursifs


Principe de la récursivité
Algorithmes récursifs
Résolution de problèmes par récursivité

Plan

1 Principe de la récursivité
Decendre ou monter un escalier
Couper un gâteau

2 Algorithmes récursifs
Définition
Algorithmes classiques

3 Résolution de problèmes par récursivité

S. Verel, M.-E. Voge Algorithmes récursifs


Principe de la récursivité
Decendre ou monter un escalier
Algorithmes récursifs
Couper un gâteau
Résolution de problèmes par récursivité

Les puissances de a

Objectif :
Calculer an en "travaillant" le moins possible

⇒ on sait que an = a × an−1 ...

Itératif : chouette ! on connaît a0 ! ! !

Récusif : si seulement on connaissait an−1 ...

S. Verel, M.-E. Voge Algorithmes récursifs


Principe de la récursivité
Decendre ou monter un escalier
Algorithmes récursifs
Couper un gâteau
Résolution de problèmes par récursivité

L’escalier & la puissance

an = a × an−1
arrivee depart arrivee

n n
depart

ITERATIF RECURSIF
1 1
0 0
a^0 = 1 a^0 = 1

départ : info connue départ : info cherchée


monter vers résultat descendre vers connue
arêt en haut : n arêt en bas : 0
monter vers résultat
→ boucle pour → comment ? ? ?
S. Verel, M.-E. Voge Algorithmes récursifs
Principe de la récursivité
Decendre ou monter un escalier
Algorithmes récursifs
Couper un gâteau
Résolution de problèmes par récursivité

Construction de l’algorithme récursif

on sait :
1 monter/descendre d’une marche : an = a × an−1
2 a0 = 1

mais : plusieurs marches ...


comment faire le reste du travail ?
Solution : appel récursif
l’agorithme fait une partie du travail (descendre/monter une
marche)
demande à un algorithme de faire le reste : lui même

S. Verel, M.-E. Voge Algorithmes récursifs


Principe de la récursivité
Decendre ou monter un escalier
Algorithmes récursifs
Couper un gâteau
Résolution de problèmes par récursivité

Exemple d’exécution
Calcul de la puissance

Algorithme puissance(a : réel, n : entier): : réel


début
si n = 0 alors
retourner 1
sinon
retourner puissance(a, n-1) * a
fin si
fin

S. Verel, M.-E. Voge Algorithmes récursifs


Principe de la récursivité
Decendre ou monter un escalier
Algorithmes récursifs
Couper un gâteau
Résolution de problèmes par récursivité

Exemple d’exécution
Calcul de la puissance

Calcul de (1.5)3 : a = 1.5 et n = 3.


1. puissance(1.5, 3)
2. —–> puissance(1.5, 2)
3. ———-> puissance(1.5, 1)
4. —————-> puissance(1.5, 0) = 1
5. ———-> puissance(1.5, 1) = 1 * 1.5 = 1.5
6. —–> puissance(1.5, 2) = 1.5 * 1.5 = 2.25
7. puissance(1.5, 3) = 2.25 * 1.5 = 3.375

S. Verel, M.-E. Voge Algorithmes récursifs


Principe de la récursivité
Decendre ou monter un escalier
Algorithmes récursifs
Couper un gâteau
Résolution de problèmes par récursivité

Autre problème : le PGCD

monter/descendre : PGCD(a, b) = PGCD(b, a modulo b)


PGCD(a, 0) = a

S. Verel, M.-E. Voge Algorithmes récursifs


Principe de la récursivité
Decendre ou monter un escalier
Algorithmes récursifs
Couper un gâteau
Résolution de problèmes par récursivité

Exemple du calcul du pgcd

Algorithme PGCD(a, b : entier): : entier


début
1: si b = 0 alors
2: retourner a
3: sinon
4: c ← a modulo b
5: retourner PGCD(b, c)
6: fin si
fin

S. Verel, M.-E. Voge Algorithmes récursifs


Principe de la récursivité
Decendre ou monter un escalier
Algorithmes récursifs
Couper un gâteau
Résolution de problèmes par récursivité

Exécution de l’algorithme
Pour a = 72 et b = 34
1. PGCD(72, 34)
2. b 6= 0
5. c =4
6. PGCD(34, 4)
2. b 6= 0
5. c =2
6. PGCD(4, 2)
2. b 6= 0
5. c =0
6. PGCD(2, 0)
2. b=0
3. PGCD = 2
S. Verel, M.-E. Voge Algorithmes récursifs
Principe de la récursivité
Decendre ou monter un escalier
Algorithmes récursifs
Couper un gâteau
Résolution de problèmes par récursivité

Une autre vision de la récursivité

Problème : manger un gâteau


énorme gâteau,
seulement une bouchée à la fois,
on sait couper en deux tout morceau de gâteau,

⇒ on le coupe en petits morceaux et on les mange !

Exemple : recherche dichotomique dans un tableau trié


tableau T de n cases,
vérifier seulement une case à la fois,
on sait réduire la taille de T (jouer sur les indices),

⇒ on le coupe en petits tableaux et on cherche dans chacun !

S. Verel, M.-E. Voge Algorithmes récursifs


Principe de la récursivité
Decendre ou monter un escalier
Algorithmes récursifs
Couper un gâteau
Résolution de problèmes par récursivité

Recherche dichotomique
Recherche dans un tableau de nombres entiers ordonnés

Algorithme recherche(n :entier, t :tableau d’entiers, a, b : entier): : booléen


variable c : entier
début
si a > b alors
retourner Faux // il ne reste plus de cases à vérifier
sinon
c ← (a + b)/2 // on coupe
si t[c] = n alors
retourner Vrai // on est tombé juste sur la bonne case
sinon
si t[c] < n alors
retourner recherche(n, t, c+1, b) // on cherche dans une partie
sinon
retourner recherche(n, t, a, c-1) // on cherche dans l’autre
fin si
fin si
fin si
fin
S. Verel, M.-E. Voge Algorithmes récursifs
Principe de la récursivité
Decendre ou monter un escalier
Algorithmes récursifs
Couper un gâteau
Résolution de problèmes par récursivité

Exécution de l’algorithme

t: 2 5 6 8 11 15 20

1. recherche(6, t, 0, 6) 2 5 6 8 11 15 20
1. c =3
1. t[3] > 6
2. —–> recherche(6, t, 0, 2) 2 5 6 8 11 15 20
2. c =1
2. t[1] < 6
3. ———-> recherche(6, t, 2, 2) 2 5 6 8 11 15 20
3. c =2
3. t[2] = 6
3. ———-> recherche(6, t, 2, 2) = Vrai
4. —–> recherche(6, t, 0, 2) = Vrai
5. recherche(6, t, 0, 6) = Vrai
S. Verel, M.-E. Voge Algorithmes récursifs
Principe de la récursivité
Decendre ou monter un escalier
Algorithmes récursifs
Couper un gâteau
Résolution de problèmes par récursivité

Points communs et IMPORTANTS

1 appel récursif UNIQUEMENT sur données plus petites


marche du dessous : n − 1 au lieu de n, (b,a mod b) au lieu de
(a,b),
demi-morceau de gâteau : demi-tableau,
2 faire le travail pour passer à des données plus petites
monter/descendre une marche : n en fonction de n − 1,
couper le gt̂eau,
3 identifier les cas à résoudre sans appel récursif :
première marche : n = 0, (a, 0),
bouchée de gâteau : une case de tableau,
4 s’arrêter à temps, plus de sens sinon :
dernière marche : n < 0,
plus que des bouchées : a > b : pas de case,

S. Verel, M.-E. Voge Algorithmes récursifs


Principe de la récursivité
Decendre ou monter un escalier
Algorithmes récursifs
Couper un gâteau
Résolution de problèmes par récursivité

Structure de ces algorithmes : exemple du PGCD

Base : où on s’arrête, pas d’appel récursif


si b = 0 alors
retourner a
sinon
...
fin si
Hérédité : calcul à partir de paramètres plus "petits"
si b = 0 alors
...
sinon
...
retourner PGCD(b, c)
fin si
fin
S. Verel, M.-E. Voge Algorithmes récursifs
Principe de la récursivité
Définition
Algorithmes récursifs
Algorithmes classiques
Résolution de problèmes par récursivité

Définition (informelle)

Algorithmes récursifs
Un algorithme récursif est un algorithme qui fait appel à lui-même
dans le corps de sa propre définition.

Il existe deux types d’algorithmes récursifs :


les algorithmes récursifs qui se terminent :
au bout d’un nombre fini d’opérations, l’algorithme s’arrête.
les algorithmes récursifs qui ne se terminent pas :
on peut imaginer que l’algorithme continue "éternellement" de
calculer.

S. Verel, M.-E. Voge Algorithmes récursifs


Principe de la récursivité
Définition
Algorithmes récursifs
Algorithmes classiques
Résolution de problèmes par récursivité

Exemples

Algorithme calcul1(n : entier): : réel


début
si n = 0 alors
retourner 2
sinon
retourner 21 (n − 1) + 2
fin si
fin

calcul1 n’est pas un algorithme résursif

S. Verel, M.-E. Voge Algorithmes récursifs


Principe de la récursivité
Définition
Algorithmes récursifs
Algorithmes classiques
Résolution de problèmes par récursivité

Exemples

Algorithme calcul2(n : entier): : réel


début
si n = 0 alors
retourner 2
sinon
retourner 21 calcul2(n-1) +2
fin si
fin

calcul2 est un algorithme résursif qui se termine

S. Verel, M.-E. Voge Algorithmes récursifs


Principe de la récursivité
Définition
Algorithmes récursifs
Algorithmes classiques
Résolution de problèmes par récursivité

Exemples

Algorithme calcul3(n : entier): : réel


début
si n = 0 alors
retourner 2
sinon
retourner 21 calcul3(n-2)+2
fin si
fin

calcul3(n) est un algorithme résursif :


si n est pair, calcul3 se termine
si n est impair, calcul3 ne se termine pas

S. Verel, M.-E. Voge Algorithmes récursifs


Principe de la récursivité
Définition
Algorithmes récursifs
Algorithmes classiques
Résolution de problèmes par récursivité

A méditier
Calcul de la puissance

Algorithme puissanceTerminale(a : réel, n : entier, acc : réel): :


réel
début
si n = 0 alors
retourner acc
sinon
retourner puissanceTerminale(a, n − 1, acc ∗ a)
fin si
fin
Comment s’exécute cet algorithme ? puissanceTerminale(1.5, 3, 1)

récursivité terminale : équivalent à une itération


→ résultat final donné par appel récursif
→ condition de "base" = condition arêt boucle tantque
S. Verel, M.-E. Voge Algorithmes récursifs
Principe de la récursivité
Définition
Algorithmes récursifs
Algorithmes classiques
Résolution de problèmes par récursivité

Intérêts

bien adapté à la résolution de certains problèmes (et pas


seulement mathématiques !)
algorithmes souvent moins "laborieux" à écrire :
moins de variables, beaucoups moins de boucles.
une résolution par algorithme récursif nécessite souvent de
prendre du recul pour résoudre le problème (avantage !)

S. Verel, M.-E. Voge Algorithmes récursifs


Principe de la récursivité
Définition
Algorithmes récursifs
Algorithmes classiques
Résolution de problèmes par récursivité

Parallèle entre principe de récurrence et algorithme récursif

définition mathématique par récurrence


très proche
définition d’un algorithme récursif (cf. puissance)

Modes de calcul proches :

a3 = a.a2 = a.a.a1 = a.a.a

Souvent, définition mathématique valide lorsque algorithme récursif


associé se termine.
S. Verel, M.-E. Voge Algorithmes récursifs
Principe de la récursivité
Définition
Algorithmes récursifs
Algorithmes classiques
Résolution de problèmes par récursivité

Parallèle entre principe de récurrence et algorithme récursif

Base : initialisation de la récurrence


si b = 0 alors
retourner a
sinon
...
fin si
Hérédité : calcul à partir de paramètres plus "petits"
si b = 0 alors
...
sinon
...
retourner PGCD(b, c)
fin si
fin
S. Verel, M.-E. Voge Algorithmes récursifs
Principe de la récursivité
Définition
Algorithmes récursifs
Algorithmes classiques
Résolution de problèmes par récursivité

Calcul de la factorielle

Factorielle

1, si n = 0
n! =
n.(n − 1)!, sinon

Algorithme factorielle(n : entier): : entier


début
si n = 0 alors
retourner 1
sinon
retourner n * factorielle(n-1)
fin si
fin

S. Verel, M.-E. Voge Algorithmes récursifs


Principe de la récursivité
Définition
Algorithmes récursifs
Algorithmes classiques
Résolution de problèmes par récursivité

Exécution de l’algorithme

Calcul de 3!.
1. factorielle(3) = 3 * factorielle(2)
2. —–> factorielle(2) = 2 * factorielle(1)
3. ———-> factorielle(1) = 1 * factorielle(0)
4. —————-> factorielle(0) = 1
5. ———-> factorielle(1) = 1 * 1 = 1
6. —–> factorielle(2) = 2 * 1 = 2
7. factorielle(3) = 3 * 2 = 6

S. Verel, M.-E. Voge Algorithmes récursifs


Principe de la récursivité
Définition
Algorithmes récursifs
Algorithmes classiques
Résolution de problèmes par récursivité

Recherche dichotomique
Recherche d’un mot dans un dictionnaire

début
pages de recherche <- dictionnaire
tant que mot lu n’est pas le mot recherché faire
lire mot médian des pages de recherche
si le mot lu est plus petit que mot recherché alors
pages de recherche <- pages à droite du mot lu
sinon
pages de recherche <- pages à gauche du mot lu
fin si
fin tant que
retourner (mot lu)
fin

S. Verel, M.-E. Voge Algorithmes récursifs


Principe de la récursivité
Définition
Algorithmes récursifs
Algorithmes classiques
Résolution de problèmes par récursivité

Recherche dichotomique
Recherche d’un mot dans un dictionnaire

Algorithme recherche(m : mot, l : liste): : booléen


variable lu : mot
début
lu ← median(l)
si lu = m alors
retourner Vrai
sinon
si lu < m alors
retourner recherche( liste à droite de lu)
sinon
retourner recherche( liste à gauche de lu)
fin si
fin si
fin
−→ Incomplet (jamais Faux) ! !

S. Verel, M.-E. Voge Algorithmes récursifs


Principe de la récursivité
Définition
Algorithmes récursifs
Algorithmes classiques
Résolution de problèmes par récursivité

Recherche dichotomique
Recherche d’un mot dans un dictionnaire

Algorithme recherche(m : mot, l : liste): : booléen


variable lu : mot
début
si l est vide alors
retourner Faux
sinon
lu ← median(l)
si lu = m alors
retourner Vrai
sinon
si lu < m alors
retourner recherche( liste à droite de lu)
sinon
retourner recherche( liste à gauche de lu)
fin si
fin si
fin si
S. Verel, M.-E. Voge Algorithmes récursifs
Principe de la récursivité
Algorithmes récursifs
Résolution de problèmes par récursivité

Quand utiliser un algorithme récursif ?

Est-ce que le problème dépend d’un (ou plusieurs)


paramètre(s) ?
Est-il possible de résoudre le problème lorsque la (les) valeur(s)
du paramètre est "petite(s)" ?
Est-il possible de résoudre le problème à l’aide de la résolution
du problème portant sur une (des) "plus petite(s)" valeur(s)
du paramètre ?

Si oui, oui, oui


alors la résolution par un algorithme récursif est à envisager.

S. Verel, M.-E. Voge Algorithmes récursifs


Principe de la récursivité
Algorithmes récursifs
Résolution de problèmes par récursivité

Tours de Hanoï (Édouard Lucas 1842 - 1891)

Le problème des tours de Hanoï consiste à déplacer N disques de


diamètres différents d’une tour de départ à une tour d’arrivée en
passant par une tour intermédiaire et ceci en un minimum de
coups, tout en respectant les règles suivantes :
on ne peut déplacer plus d’un disque à la fois,
on ne peut placer un disque que sur un autre disque plus grand
que lui ou sur un emplacement vide.

S. Verel, M.-E. Voge Algorithmes récursifs


Principe de la récursivité
Algorithmes récursifs
Résolution de problèmes par récursivité

Comment résoudre ce problème ?

Est-ce que le problème dépend d’un (ou plusieurs)


paramètre(s) ?
−→ Oui le nombre de disques.
Est-il possible de résoudre le problème lorsque la (les) valeur(s)
du paramètre est "petite(s)" ?
−→ Oui lorsque le nombre de disque est 1.
Est-il possible de résoudre le problème à l’aide de la résolution
du problème portant sur une (des) "plus petite(s)" valeur(s)
du paramètre ?
−→ Oui...

S. Verel, M.-E. Voge Algorithmes récursifs


Principe de la récursivité
Algorithmes récursifs
Résolution de problèmes par récursivité

Algorithme récursif

Algorithme hanoi(n : entier, A : caractère, B : caractère, C :


caractère ): : rien
début
si n = 1 alors
écrire("déplacer ", A, " vers ", C)
sinon
hanoi(n-1, A, C, B) ;
écrire("déplacer ", A, " vers ", C)
hanoi(n-1, B, A, C) ;
fin si
fin

S. Verel, M.-E. Voge Algorithmes récursifs


Principe de la récursivité
Algorithmes récursifs
Résolution de problèmes par récursivité

Exécution de l’algorithme

Hanoi(2, ’a’, ’b’, ’c’)


Hanoi(3, ’a’, ’b’, ’c’)
Hanoi(4, ’a’, ’b’, ’c’)

Quel est le nombre de déplacements en fonction de n ?


Pour tout entier n ≥ 1, Cn = 2n − 1. A démontrer par récurrence...

Pour n = 64, les moines d’Hanoi y sont encore...

S. Verel, M.-E. Voge Algorithmes récursifs


Principe de la récursivité
Algorithmes récursifs
Résolution de problèmes par récursivité

Somme des cubes

Calculer S(n) = 13 + 23 + 33 + . . . + n3
Est-ce que le problème dépend d’un (ou plusieurs)
paramètre(s) ?
−→ Oui n.
Est-il possible de résoudre le problème lorsque la (les) valeur(s)
du paramètre est "petite(s)" ?
−→ Oui pour n = 0 ou n = 1
Est-il possible de résoudre le problème à l’aide de la résolution
du problème portant sur une (des) "plus petite(s)" valeur(s)
du paramètre ?
−→ Oui, S(n) = S(n − 1) + n3

S. Verel, M.-E. Voge Algorithmes récursifs


Principe de la récursivité
Algorithmes récursifs
Résolution de problèmes par récursivité

Somme des cubes


Algorithme

Algorithme sommeCube(n : entier): : entier


début
si n = 0 alors
retourner 0
sinon
retourner sommeCube(n-1) +n3
fin si
fin

S. Verel, M.-E. Voge Algorithmes récursifs


Principe de la récursivité
Algorithmes récursifs
Résolution de problèmes par récursivité

Exécution de l’algorithme

Calcul de S(3)
1. sommeCube(3)
2. —–> sommeCube(2)
3. ———-> sommeCube(1)
4. —————-> sommeCube(0) = 0
5. ———-> sommeCube(1) = 0 + 13 = 1
6. —–> sommeCube(2) = 1 + 23 = 9
7. sommeCube(3) = 9 + 33 = 18

S. Verel, M.-E. Voge Algorithmes récursifs


Principe de la récursivité
Algorithmes récursifs
Résolution de problèmes par récursivité

Régionnement du plan

Etant donné un nombre n de droites, calculer le nombre Rn


maximum de régions du plan obtenus

Est-ce que le problème dépend d’un (ou plusieurs)


paramètre(s) ?
−→ Oui le nombre n de droites.
Est-il possible de résoudre le problème lorsque la (les) valeur(s)
du paramètre est "petite(s)" ?
−→ Oui pour n = 0 ou n = 1
Est-il possible de résoudre le problème à l’aide de la résolution
du problème portant sur une (des) "plus petite(s)" valeur(s)
du paramètre ?
−→ Oui, en comptant le nombre régions ajoutées lorsqu’on
ajoute une droite à n − 1 droites : une région supplémentaire
par droite coupée, plus une dernière région.
S. Verel, M.-E. Voge Algorithmes récursifs
Principe de la récursivité
Algorithmes récursifs
Résolution de problèmes par récursivité

Régionnement du plan
Algorithme

Algorithme region(n : entier): : entier


début
si n = 0 alors
retourner 1
sinon
retourner region(n-1) +n
fin si
fin

S. Verel, M.-E. Voge Algorithmes récursifs


Principe de la récursivité
Algorithmes récursifs
Résolution de problèmes par récursivité

Objectifs de la séance 3

écrire des algorithmes récursifs comme par exemple celui


calculant la factorielle et recherchant un élément par
dichotomie

Questions principales du jour :


Comment écrire ce que l’on ne connait pas encore ?

S. Verel, M.-E. Voge Algorithmes récursifs


Principe de la récursivité
Algorithmes récursifs
Résolution de problèmes par récursivité

Travail de documentation

Trouver de la documentation en rapport avec l’ensemble de


l’enseignement.

Quels sont vos premières références ?

S. Verel, M.-E. Voge Algorithmes récursifs

You might also like