Académique Documents
Professionnel Documents
Culture Documents
Cours de Recursivite
Cours de Recursivite
Cours de Recursivite
LA Récursivité Algorithmique
1- Rappel
L'approche efficace pour résoudre un problème complexe consiste souvent à le décomposer en plusieurs
sous-problèmes plus simples qui seront étudiés séparément.
D'autre part, il arrive souvent qu'une même séquence d'instructions sera utilisée à plusieurs reprises dans un
programme, et on souhaite évidemment ne pas avoir à la reproduire systématiquement.
Leconceptdelaprogrammationmodulairepermetde résoudreles difficultés évoquées ci-dessus
enutilisantlanotiondefonction(sous-programme).
Unefonctionpeutappeleruneautrefonction.Uncasparticulierellepeutappelerelle-
même,c'estl'objectifdececours.
defnomfonction(paramètres éventuels):
bloc d'instructions
Exemples :
Exemple 1 : Exemple 2 :
une fonction qui nécessite un paramètre une fonction qui ne nécessite pas de paramètre
= ∗ +
La conception d'une fonction récursive n'est pas éloignée du principe de démonstration par récurrence :
Leprincipededémonstration par récurrence est le suivant:
1- On démontre d'une part que la suite satisfait une telle propriété (croissante, décroissante,....)
pour le cas de base
2- D'autre part, on suppose que cette propriété est valide pour et on démontre que cela implique
que la suite satisfait aussi cette propriété pour tout n > 0.
Fonction récursive
Une fonction est dite récursive si elle s'appelle elle-même aucours deson exécution.
Avantagesdela récursivité
Principe
L'idée de base pour l’écriture d'une fonction récursive consiste à
définirtoutd'abordlemodèlemathématiquedelafonctionderécurrence.
Dans ce modèlede mathématique ilfaut déterminer la condition d'arrêtpourassurerlaterminaisonde
l'algorithme.
Exemple
Nouspouvonsdoncdéfinirlafonctionfactorielledelamanièresuivante:
1 si n=0
n!
n * (n 1)! sinon
n!=n*(n-1)! : Représentelarelationde récurrence.
0!=1 : représentelavaleurdelaterminaisondel'algorithme.
Le code en Python
Méthode itérative Méthode récursive
def fact_Iter(n): Def fact_Rec(n):
F=1 ifn==0:
foriinrange(2,n+1): return1
F=F*i else:
returnF returnn* fact_Rec(n-1)
3- Les différents types de récursivité
3-1 : La récursivité simple
Définition: pour ce type de récursivité on fait un seul appel récursif pour la fonction P dans le corps d'une
fonction récursive P.
Exemple1: calcul de puissance
1 si n=0
xn n 1
x * x sinon
0 si n=0
Exemple 1: suite de Fibonacci Fn 1 si n =1
F +F
n 1 n 2 si n 2
Questions:
1. Ecrire le code de la fonction récursive Fibo_Re qui retourne la valeur de .
2. Donnerlatrace d'exécutionpourcalculer
Exemple2:Calcul de combinaison
0 si p=0
Cnp 1 si n =p
p p 1
Cn 1 +Cn 1 sinon
Questions:
1. Ecrirelecodedecettefonction récursive.
2. Donnerlatrace d'exécutionpourcalculer
3-2 : La récursivité imbriquée
Définition:
Une récursivité estdite imbriquéesiunefonction récursive P contientunappel imbriqué.
Exemple:La fonction d'ACKERMANN
p 1 si n=0
Ack (n, p) Ack(n-1,1) si n >0 et p=0
Ack n-1, Ack n, p-1 sinon
Questions:
1. Calculer a la main Ack(1,0); Ack(2,0) et Ack(3,0):
fact(2)=2*fact(1)
fact(3)=3*fact(2) fact(3)=3*fact(2)
- Appel de fact(3) : retourne 3*fact(2)
- Appel de fact(3) : retourne 3*fact(2)
- Appeldefact(2) : retourne2*fact(1)
PILE PILE
fact(0)= 1
fact(1)=2*fact(0) fact(1)=2*fact(0)
fact(2)=2*fact(1) fact(2)=2*fact(1)
fact(3)=3*fact(2) fact(3)=3*fact(2)
- Appel de fact(3) : retourne 3*fact(2) - Appel de fact(3) : retourne 3*fact(2)
- Appeldefact(2) : retourne2*fact(1) - Appeldefact(2) : retourne2*fact(1)
- Appel de fact(1) : retourne 3*fact(0) - Appel de fact(1) : retourne 3*fact(0)
- Appeldefact(0) : retourne 1
PILE
- Appeldefact(0):retourne1
fact(1)=1*fact(0)=1*1=1
fact(2)=2*fact(1)
fact(3)=3*fact(2)
PILE
- Appeldefact(1):retourne1
fact(1)=1*fact(0)=1*1=1
fact(2)=2*fact(1)
fact(3)=3*fact(2)
PILE
- Appeldefact(2):retourne 2
PILE
fact(3)=3*fact(2) = 3 * 2 = 6
PILE
- Pile vide
= ( + )
5-2 : Comparaisondecomplexité
Lacomparaisondecomplexité entreunalgorithmerécursifetunalgorithme itératifreposesurdeuxaspectsde
l'évaluation:
1- Complexité spatiale :onmesurel'espace mémoire occupé parlesvariables.
2- Complexité temporelle :onmesurelenombre d'opérations.
Complexité spatiale(CS)
La taille mémoire occupée par une fonction itérative est inférieure à celle utilisée par une fonction
récursive, en raison des appels successifs dans une cette dernière.
Exemple:
CS(fact_Iter )= O(1)
CS(fact_Rec)= O(n)
CS(fact_Iter )<CS(fact_Rec)
Complexité temporelle(CT)