Université de Corse - IUP NTIC2 2005/2006 – Algorithme et Structure de Données
Algorithmes et
Structures de Données
Chapitre 2 - La récursivité
Capocchi Laurent
capocchi@univ-corse.fr
http://spe.univ-corse.fr/capocchiweb
Université de Corse - IUP NTIC2 2005/2006 – Algorithme et Structure de Données
Objectif
Les algorithmes qui s’appellent eux mêmes
Algorithmes récursifs
Base, partie strictement récursive
Principe de fonctionnement
Exemples
Université de Corse - IUP NTIC2 2005/2006 – Algorithme et Structure de Données
Définitions
«Une procédure récursive est une procédure
récursive»
Technique ou concept défini en fonction de lui même
Directement ou indirectement
Elle permet de résoudre certains problèmes d'une manière
rapide comparé à la technique itérative
La récursivité utilise toujours la pile du
programme en cours
Université de Corse - IUP NTIC2 2005/2006 – Algorithme et Structure de Données
Définitions
Une pile est une zone mémoire réservée à chaque
programme
Le rôle de la pile est stocker les variables locales et les
paramètres d'une procédure
Dans une procédure récursive, toutes les variables locales
sont stockées dans la pile et empilées autant de fois qu'il y
a d'appels récursifs.
Attention aux remplissages abusifs entraînant les
débordement de pile
En fin de programme les variables sont
désempilées
Université de Corse - IUP NTIC2 2005/2006 – Algorithme et Structure de Données
Base, partie strictement récursive
Une définition récursive est composée de deux parties:
Une partie non récursive: une instruction (ou bloc
d'instructions) nommée « point d'arrêt » qui indique que le
reste des instructions ne doit pas être exécuté.
Une partie strictement récursive
fonction maFonction ( ….. ) : TypeDeRetour
variables locales : …..
si ( fin ) alors
…..
sinon
maFonction ( ….. )
finsi
retourner ( valeur )
finFonction c
Condition
d'arrêt
Appel
récursif
Université de Corse - IUP NTIC2 2005/2006 – Algorithme et Structure de Données
Base, partie strictement récursive
Une fonction récursive « f » peut être appelées depuis son
propre corps de fonction
Soit directement: si la fonction « f » appelle
directement « f », on dit que la récursivité est directe
Soit indirectement à travers une ou plusieurs fonctions
relais: si « f » appelle une fonction « f1 », qui appelle
une fonction « f2 », ..., qui appelle une fonction « fn » et
qui enfin appelle « f » on dit qu'il s'agit d'une
récursivité indirecte.
Université de Corse - IUP NTIC2 2005/2006 – Algorithme et Structure de Données
Principe de fonctionnement
La question qui se pose dans la définition d'une fonction
récursive est celle de la condition d'arrêt de la récursivi
Exemple: calcul de la somme des n premier entiers positifs
somme(n) = n + somme(n-1) et somme(1) = 1
fonction somme ( n : NatuelNonNul) :
NatuelNonNul
variable locale temp : NatuelNonNul
si (n==1)
retourner 1
sinon
temp somme(n-1)
retourner n + temp
finSi
FinFonction somme
sans le test
si (n==1), la
fonction ne
s'arrêterait
jamais !
Université de Corse - IUP NTIC2 2005/2006 – Algorithme et Structure de Données
Principe de fonctionnement
Les paramètres de l'appel récursif doivent toujours changer
Sinon l'ordinateur fait un appel infini à la procédure récursive
impliquant un débordement de la pile
Le changement de valeurs conduit l'ordinateur à rencontrer un
ensemble de paramètres vérifiant le test d'arrêt indiquant que
la procédure récursive aura atteint le fond (point terminal)
Les paramètres ainsi que les variables locales sont
désemplilées au fur et à mesure qu'on remonte
les niveaux
Université de Corse - IUP NTIC2 2005/2006 – Algorithme et Structure de Données
Exemple (1)
somme(4)
création du premier temp
somme(3)
création du deuxième temp
somme(2)
création du troisième temp
somme(1)
création du quatrième temp
destruction de temp
retourne 1
destruction de temp
retourne 2+1
destruction de temp
retourne 3+3
destruction de temp
retourne 4+6
Trace de la
fonction somme
pour n = 4
Université de Corse - IUP NTIC2 2005/2006 – Algorithme et Structure de Données
Exemple (2)
procédure combinaison (st, tete: ChaineCaractère)
variables locales i: Entier
si ( longueur(st) = 1) alors
affiche(tete+st)
sinon
pour i=1 jusqu'à longueur(st) faire
combinaison(copie(st, 1, longueur(st)-1)),
tete+st[0])
st <- copie(st, 1, longueur(st)-1) + st[0])
finpour
finsi
fincombinaison
Université de Corse - IUP NTIC2 2005/2006 – Algorithme et Structure de Données
Exemple (2)
Combi('abc', ' ') Paramètre: st <- 'abc'; tete <- ' '
i<-1
combi('bc', 'a')
st <- 'bca'
i <- 2
combi('ca','b')
Paramètre: st <- 'bc'; tete <- 'a'
i<-1
combi('c', 'ab')
st <- 'cb'
i <- 2
combinaison('b','ac')
st <- 'bc' // valeur qui n'a plus d'importance
Point d'arrêt: on affiche 'ab'+'c' soit 'abc'
Point d'arrêt: on affiche 'ac'+'b' soit 'acb'
Université de Corse - IUP NTIC2 2005/2006 – Algorithme et Structure de Données
Exemple (2)
st <- 'bca'
i <- 2
combi('ca','b')
st <- 'ca'+b'='cab'
i <- 3
combi('ab','c')
Paramètre: st <- 'ca'; tete <- 'b'
i<-1
combi('a', 'bc')
st <- 'ac'
i <- 2
combinaison('c','ba')
st <- 'ca' // valeur qui n'a plus d'importance
Point d'arrêt: on affiche 'bc'+'a' soit 'bca'
Point d'arrêt: on affiche 'ba'+'c' soit 'bac'
Université de Corse - IUP NTIC2 2005/2006 – Algorithme et Structure de Données
Exemple (2)
st <- 'ca'+b'='cab'
i <- 3
combi('ab','c')
st <- 'ab'+'c'='abc' //valeur qui n'a plus d'importance
Paramètres: st <- 'ab'; tete <- 'c'
i<-1
combi('b', 'ca')
st <- 'ba'
i <- 2
combinaison('a','cb')
st <- 'ab' // valeur qui n'a plus d'importance
Point d'arrêt: on affiche 'ca'+'b' soit 'cab'
Point d'arrêt: on affiche 'cb'+'a' soit 'cba'
Université de Corse - IUP NTIC2 2005/2006 – Algorithme et Structure de Données
Remarques
Lorsqu'une fonction récursive définit des variables locales, un
exemplaire de chacune d'entre elles est créée à chaque appel
récursif de la fonction
Exemple somme(4), la variable locale temp est créée 4 fois
Ces variables sont restituées au fur et a mesure que l'on quitte
la fonction comme toute variables locale d'un fonction
Attention au dépassement de mémoire et à la définition
abusive de variables
Université de Corse - IUP NTIC2 2005/2006 – Algorithme et Structure de Données
Structure de données récursives
Une structure de données récursives tout comme une
définition récursive, est une structure qui fait référence à elle
même
Les structures de données naturellement récursives sont les
listes, les arbres, ...
Université de Corse - IUP NTIC2 2005/2006 – Algorithme et Structure de Données
Exercices
Transformer une boucle en une procédure récursive
Transformer 2 boucles imbriquées en une procédure récursive
Calculer la factorielle d'un entier
Inverser une chaîne de caractères
Dire si une chaîne de caractères est un palindrome
Afficher les anagramme d'une chaîne de caractères
Afficher le triangle de Pascal
Donner l'algorithme récursif des tours de Hanoi
Tracer une maison sans lever le crayon
Université de Corse - IUP NTIC2 2005/2006 – Algorithme et Structure de Données
Bibliographie et Webographie
A. CHAMBILY, P. CONSTANTINE, La récursivité pas à pas
C. PAOLI, Cours d'algorithmes et structures de données
1 / 5 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !