SlideShare une entreprise Scribd logo
[LA RECURSIVITE EN PYTHON] ESPRIMS’
Mariem ZAOUALI | Chapitre 4 : La récursivité en Python 1
Chapitre 4 : La récursivité en Python
• Définition de la récursivité
• Comparaison entre l’itératif et le récursif
1. Définition de la récursivité et comparaison entre l’itératif et le
récursif
a. La récursivité
Pour minimiser la complexité de compréhension d’un problème, on opte pour sa
décomposition en des sous-problèmes moins complexes. Ce qui fait que la résolution
du grand problème revient à résoudre ceux des sous-problèmes (L’algorithme va
s’appeler lui-même pour résoudre les sous-problèmes) La notion proche en
mathématique à cette démarche est le raisonnement par récurrence.
Une fonction est dite récursive si elle s’appelle elle-même. Il faut prévoir toujours une
condition d’arrêt pour stopper les appels récursifs sinon on obtient un traitement
similaire à une boucle infinie.
Exemple :
Un appel récursif induit lui-même à d’autres appels récursifs, ce qui peut mener à un
nombre infini d’appels. Il faut arrêter la suite des appels ! Dans notre cas, on sait que
0!=1, une fois n atteint la valeur 0, le processus d’appel doit s’arrêter:
Python utilise une pile d’exécution pour enregistrer les appels et leurs contextes
(paramètres utilisés, résultats rendus, variables locales déclarées par chacun des
appels…). Mais la taille de la pille n’est illimitée! Elle peut déborder et donc elle
déclenche une exception.
La pile d’exécution de l’appel de fact avec n=3 a l’allure suivante:
[LA RECURSIVITE EN PYTHON] ESPRIMS’
Mariem ZAOUALI | Chapitre 4 : La récursivité en Python 2
D’une manière générale, pour obtenir une solution récursive à un problème
 On paramètre le problème
 On décompose le problème
 On détermine la condition d’arrêt qui arrête les énoncés récursifs
Dans le cas de la factorielle, la relation entre le cas simple et le cas général est la
réduction des données n!=n*(n-1)! Mais ce n’est pas toujours qu’on attend une
valeur!
Parfois la fonction ne retourne aucune valeur mais effectue des actions récursives
comme par exemple le cas d’affichage d’une liste ou son inversion
 Exemple 1 :
 Exécution
 Exemple 2 :
[LA RECURSIVITE EN PYTHON] ESPRIMS’
Mariem ZAOUALI | Chapitre 4 : La récursivité en Python 3
 Exécution
b. Itératif vs récursif
Toute solution récursive peut avoir une solution itérative équivalente. La version
récursive augmente la complexité algorithmique par rapport à la version itérative
d’où une augmentation du temps du calcul. L’avantage de la récursivité réside au
niveau de l’abstraction. Il suffit de décrire la solution au problème à partir d’un cas
simple. Ce style de programmation est appelé déclaratif. On utilise la récursivité si:
 Le raisonnement du problème est lui-même récursif.
 La structure de données utilisée est récursive(une liste peut être vue
comme un élément suivi d’une autre liste).
c. Exemple de raisonnement récursif : les tours de Hanoï
Il s’agit d’un jeu où on va déplacer les disques d’un point de départ vers une
destination. Nous disposons donc de :
• 3 bâtons : A,B,C
• 3 disques de différentes tailles déposés les uns sur les autres, du plus grand au
plus petit en terme de diamètre
• 2 Règles à suivre :
o Déplacer un disque à la fois d’un bâton à un autre
o Ne jamais mettre un disque sur un plus petit disque
[LA RECURSIVITE EN PYTHON] ESPRIMS’
Mariem ZAOUALI | Chapitre 4 : La récursivité en Python 4
Exemple :
1. Mettre tous les disques sauf le plus grand sur C
2. Déplacer le plus grand disque de A vers B
3. Mettre tous les disques de C sur B
Les points 1 et 2 de la solution esquissée sont des problèmes de Hanoï avec un
disque de moins. Si on sait résoudre un problème avec n-1 disques, alors on sait le
résoudre avec n disques. Or, on sait résoudre le problème avec 1 disque. Le
problème est résolu pour tout nombre n≥1 de disques. La solution est récursive.
Raisonnement :
 Cas de n=2
 On déplace le petit disque de A vers C
 On déplace le grand disque de A vers B
 On déplace le petit disque de C vers B
Donc, on a utilisé 3 déplacements pour résoudre le problème
 Cas général
 Déplacer les n-1 premier disques (D1,D2,..Dn-1) du pilier gauche vers le
pilier intermédiaire
 Déplacer le grand disque Dn du pilier gauche au pilier au centre
 Et déplacer les n-1 disques du pilier intermédiaire vers le pilier au centre
[LA RECURSIVITE EN PYTHON] ESPRIMS’
Mariem ZAOUALI | Chapitre 4 : La récursivité en Python 5
En python, la solution est :
d. Type de récursivité
 Simple: La fonction récursive s’appelle elle-même une seule fois (calcul de la
factorielle)
 Multiple: La fonction s’appelle elle-même plusieurs fois dans un même appel
récursif (calcul d’une combinaison)
 Croisée: Deux fonctions récursive chacune appelant l’autre (exemple nombre
pair et nombre impair)
 Imbriquée: l’appel est une imbrication d’appel (suite Ackermann)
[LA RECURSIVITE EN PYTHON] ESPRIMS’
Mariem ZAOUALI | Chapitre 4 : La récursivité en Python 6
 Terminale VS non terminale: quand l’appel récursif nécessite des instructions
de calcul autre que l’appel de la fonction elle-même, on parle de récursivité
non terminale
2. Applications
1. Donner la version récursive de la suite de Fibbonacci
2. Donner la version itérative et récursive de la fonction qui permet, pour deux
entier positifs a et b, de retourner « vrai » si a divise b et faux sinon.
Indication : test avec a=2 et b=8. On retranche de b la valeur a tant que a<b.
Si on trouve a=b c’est bien 2 est diviseur de 8!
3. Ecrire une fonction récursive permettant de convertir un nombre N donné
(base 10) en une base b (2<=b<=10)

Contenu connexe

Tendances

Introduction à Python
Introduction à PythonIntroduction à Python
Introduction à Python
Abdoulaye Dieng
 
Algorithmes d'approximation
Algorithmes d'approximationAlgorithmes d'approximation
Algorithmes d'approximationmohamed_SAYARI
 
Chapitre1: Langage Python
Chapitre1: Langage PythonChapitre1: Langage Python
Chapitre1: Langage Python
Aziz Darouichi
 
Cours python avancé
Cours python avancéCours python avancé
Cours python avancépierrepo
 
Initiation à l'algorithmique
Initiation à l'algorithmiqueInitiation à l'algorithmique
Initiation à l'algorithmique
Abdoulaye Dieng
 
Cours algorithmique et complexite complet
Cours algorithmique et complexite completCours algorithmique et complexite complet
Cours algorithmique et complexite completChahrawoods Dmz
 
Devoirs Algorithme + correction pour 4 si
Devoirs Algorithme + correction pour 4 siDevoirs Algorithme + correction pour 4 si
Devoirs Algorithme + correction pour 4 siNarûtö Bàl'Sèm
 
Chapitre 2 complexité
Chapitre 2 complexitéChapitre 2 complexité
Chapitre 2 complexité
Sana Aroussi
 
FormationPython2019.pptx
FormationPython2019.pptxFormationPython2019.pptx
FormationPython2019.pptx
LamissGhoul1
 
Exercices_Python_Fenni_2023 -corrigé.pdf
Exercices_Python_Fenni_2023 -corrigé.pdfExercices_Python_Fenni_2023 -corrigé.pdf
Exercices_Python_Fenni_2023 -corrigé.pdf
salah fenni
 
Cours Piles et files en utilisant lesl istes chainées Prof. KHALIFA MANSOURI
Cours Piles et files en utilisant lesl istes chainées Prof. KHALIFA MANSOURI Cours Piles et files en utilisant lesl istes chainées Prof. KHALIFA MANSOURI
Cours Piles et files en utilisant lesl istes chainées Prof. KHALIFA MANSOURI
Mansouri Khalifa
 
Cours les Listes doublement chainées Prof. KHALIFA MANSOURI
Cours les Listes doublement chainées Prof. KHALIFA MANSOURI Cours les Listes doublement chainées Prof. KHALIFA MANSOURI
Cours les Listes doublement chainées Prof. KHALIFA MANSOURI
Mansouri Khalifa
 
La programmation modulaire en Python
La programmation modulaire en PythonLa programmation modulaire en Python
La programmation modulaire en Python
ABDESSELAM ARROU
 
Introduction à Python - Achraf Kacimi El Hassani
Introduction à Python - Achraf Kacimi El HassaniIntroduction à Python - Achraf Kacimi El Hassani
Introduction à Python - Achraf Kacimi El Hassani
Shellmates
 
Serie algos approximationx
Serie algos approximationxSerie algos approximationx
Serie algos approximationxmohamed_SAYARI
 
resume algo 2023.pdf
resume algo 2023.pdfresume algo 2023.pdf
resume algo 2023.pdf
salah fenni
 
Cours+sql++ +base+de+données+-+bac+informatique+(2009-2010)++elève++khmiri+zied
Cours+sql++ +base+de+données+-+bac+informatique+(2009-2010)++elève++khmiri+ziedCours+sql++ +base+de+données+-+bac+informatique+(2009-2010)++elève++khmiri+zied
Cours+sql++ +base+de+données+-+bac+informatique+(2009-2010)++elève++khmiri+zied
Wajdi Ben Helal
 

Tendances (20)

Introduction à Python
Introduction à PythonIntroduction à Python
Introduction à Python
 
Algorithmes d'approximation
Algorithmes d'approximationAlgorithmes d'approximation
Algorithmes d'approximation
 
Chapitre1: Langage Python
Chapitre1: Langage PythonChapitre1: Langage Python
Chapitre1: Langage Python
 
Cours python avancé
Cours python avancéCours python avancé
Cours python avancé
 
Initiation à l'algorithmique
Initiation à l'algorithmiqueInitiation à l'algorithmique
Initiation à l'algorithmique
 
Cours algorithmique et complexite complet
Cours algorithmique et complexite completCours algorithmique et complexite complet
Cours algorithmique et complexite complet
 
Devoirs Algorithme + correction pour 4 si
Devoirs Algorithme + correction pour 4 siDevoirs Algorithme + correction pour 4 si
Devoirs Algorithme + correction pour 4 si
 
Algorithmes de tri
Algorithmes de triAlgorithmes de tri
Algorithmes de tri
 
Chapitre 2 complexité
Chapitre 2 complexitéChapitre 2 complexité
Chapitre 2 complexité
 
FormationPython2019.pptx
FormationPython2019.pptxFormationPython2019.pptx
FormationPython2019.pptx
 
Exercices_Python_Fenni_2023 -corrigé.pdf
Exercices_Python_Fenni_2023 -corrigé.pdfExercices_Python_Fenni_2023 -corrigé.pdf
Exercices_Python_Fenni_2023 -corrigé.pdf
 
Cours Piles et files en utilisant lesl istes chainées Prof. KHALIFA MANSOURI
Cours Piles et files en utilisant lesl istes chainées Prof. KHALIFA MANSOURI Cours Piles et files en utilisant lesl istes chainées Prof. KHALIFA MANSOURI
Cours Piles et files en utilisant lesl istes chainées Prof. KHALIFA MANSOURI
 
Cours les Listes doublement chainées Prof. KHALIFA MANSOURI
Cours les Listes doublement chainées Prof. KHALIFA MANSOURI Cours les Listes doublement chainées Prof. KHALIFA MANSOURI
Cours les Listes doublement chainées Prof. KHALIFA MANSOURI
 
Serie2
Serie2Serie2
Serie2
 
La programmation modulaire en Python
La programmation modulaire en PythonLa programmation modulaire en Python
La programmation modulaire en Python
 
Introduction à Python - Achraf Kacimi El Hassani
Introduction à Python - Achraf Kacimi El HassaniIntroduction à Python - Achraf Kacimi El Hassani
Introduction à Python - Achraf Kacimi El Hassani
 
Serie
SerieSerie
Serie
 
Serie algos approximationx
Serie algos approximationxSerie algos approximationx
Serie algos approximationx
 
resume algo 2023.pdf
resume algo 2023.pdfresume algo 2023.pdf
resume algo 2023.pdf
 
Cours+sql++ +base+de+données+-+bac+informatique+(2009-2010)++elève++khmiri+zied
Cours+sql++ +base+de+données+-+bac+informatique+(2009-2010)++elève++khmiri+ziedCours+sql++ +base+de+données+-+bac+informatique+(2009-2010)++elève++khmiri+zied
Cours+sql++ +base+de+données+-+bac+informatique+(2009-2010)++elève++khmiri+zied
 

Similaire à Chap4 Récursivité en python

Les fonction recursives en Programation C.pptx
Les fonction recursives en Programation C.pptxLes fonction recursives en Programation C.pptx
Les fonction recursives en Programation C.pptx
Agnawpin
 
récursivité algorithmique et complexité algorithmique et Les algorithmes de tri
récursivité algorithmique et complexité algorithmique et Les algorithmes de trirécursivité algorithmique et complexité algorithmique et Les algorithmes de tri
récursivité algorithmique et complexité algorithmique et Les algorithmes de tri
Yassine Anddam
 
chap 3 complexité (3).pdf
chap 3 complexité (3).pdfchap 3 complexité (3).pdf
chap 3 complexité (3).pdf
donixwm
 
cours3 - Daa.pptx F6ESQGHYQTDFTYAFYTFTYZFA
cours3 - Daa.pptx F6ESQGHYQTDFTYAFYTFTYZFAcours3 - Daa.pptx F6ESQGHYQTDFTYAFYTFTYZFA
cours3 - Daa.pptx F6ESQGHYQTDFTYAFYTFTYZFA
melianikholoud
 
Algorithme d'approximation
Algorithme d'approximationAlgorithme d'approximation
Algorithme d'approximationMed Lassoued
 
Cours algorithmique et complexite complet
Cours algorithmique et complexite completCours algorithmique et complexite complet
Cours algorithmique et complexite completChahrawoods Dmz
 
Cours algorithmique et complexite
Cours algorithmique et complexite Cours algorithmique et complexite
Cours algorithmique et complexite Saddem Chikh
 
ProgrammationLinéaire.pptxProgrammationLinéaire.pptxProgrammationLinéaire....
ProgrammationLinéaire.pptxProgrammationLinéaire.pptxProgrammationLinéaire....ProgrammationLinéaire.pptxProgrammationLinéaire.pptxProgrammationLinéaire....
ProgrammationLinéaire.pptxProgrammationLinéaire.pptxProgrammationLinéaire....
chaymae36
 
Diviser Pour Régner
Diviser Pour RégnerDiviser Pour Régner
Diviser Pour Régner
Mestari-Mohammed
 
Ch2_ la récursivité.pdf
Ch2_ la récursivité.pdfCh2_ la récursivité.pdf
Ch2_ la récursivité.pdf
FadouaBouafifSamoud
 
chapitre 5.pptx
chapitre 5.pptxchapitre 5.pptx
chapitre 5.pptx
BenFradjHajer1
 
optimisation cours.pdf
optimisation cours.pdfoptimisation cours.pdf
optimisation cours.pdf
Mouloudi1
 
Série sous programmes (bac scientifique)
Série sous programmes (bac scientifique)Série sous programmes (bac scientifique)
Série sous programmes (bac scientifique)
Hichem Kemali
 
algo et complexité .pptx
algo et complexité  .pptxalgo et complexité  .pptx
algo et complexité .pptx
tarekjedidi
 
la complexité des algorithmes en toute simplicité
la complexité des algorithmes en toute simplicitéla complexité des algorithmes en toute simplicité
la complexité des algorithmes en toute simplicité
Sana REFAI
 

Similaire à Chap4 Récursivité en python (16)

Les fonction recursives en Programation C.pptx
Les fonction recursives en Programation C.pptxLes fonction recursives en Programation C.pptx
Les fonction recursives en Programation C.pptx
 
récursivité algorithmique et complexité algorithmique et Les algorithmes de tri
récursivité algorithmique et complexité algorithmique et Les algorithmes de trirécursivité algorithmique et complexité algorithmique et Les algorithmes de tri
récursivité algorithmique et complexité algorithmique et Les algorithmes de tri
 
chap 3 complexité (3).pdf
chap 3 complexité (3).pdfchap 3 complexité (3).pdf
chap 3 complexité (3).pdf
 
cours3 - Daa.pptx F6ESQGHYQTDFTYAFYTFTYZFA
cours3 - Daa.pptx F6ESQGHYQTDFTYAFYTFTYZFAcours3 - Daa.pptx F6ESQGHYQTDFTYAFYTFTYZFA
cours3 - Daa.pptx F6ESQGHYQTDFTYAFYTFTYZFA
 
Algorithme d'approximation
Algorithme d'approximationAlgorithme d'approximation
Algorithme d'approximation
 
Cours algorithmique et complexite complet
Cours algorithmique et complexite completCours algorithmique et complexite complet
Cours algorithmique et complexite complet
 
Cours algorithmique et complexite
Cours algorithmique et complexite Cours algorithmique et complexite
Cours algorithmique et complexite
 
Oc3 2013
Oc3 2013Oc3 2013
Oc3 2013
 
ProgrammationLinéaire.pptxProgrammationLinéaire.pptxProgrammationLinéaire....
ProgrammationLinéaire.pptxProgrammationLinéaire.pptxProgrammationLinéaire....ProgrammationLinéaire.pptxProgrammationLinéaire.pptxProgrammationLinéaire....
ProgrammationLinéaire.pptxProgrammationLinéaire.pptxProgrammationLinéaire....
 
Diviser Pour Régner
Diviser Pour RégnerDiviser Pour Régner
Diviser Pour Régner
 
Ch2_ la récursivité.pdf
Ch2_ la récursivité.pdfCh2_ la récursivité.pdf
Ch2_ la récursivité.pdf
 
chapitre 5.pptx
chapitre 5.pptxchapitre 5.pptx
chapitre 5.pptx
 
optimisation cours.pdf
optimisation cours.pdfoptimisation cours.pdf
optimisation cours.pdf
 
Série sous programmes (bac scientifique)
Série sous programmes (bac scientifique)Série sous programmes (bac scientifique)
Série sous programmes (bac scientifique)
 
algo et complexité .pptx
algo et complexité  .pptxalgo et complexité  .pptx
algo et complexité .pptx
 
la complexité des algorithmes en toute simplicité
la complexité des algorithmes en toute simplicitéla complexité des algorithmes en toute simplicité
la complexité des algorithmes en toute simplicité
 

Plus de Mariem ZAOUALI

Chap6 Manipulation des fichiers
Chap6 Manipulation des fichiers Chap6 Manipulation des fichiers
Chap6 Manipulation des fichiers
Mariem ZAOUALI
 
Chap3 programmation modulaire en python
Chap3 programmation modulaire en pythonChap3 programmation modulaire en python
Chap3 programmation modulaire en python
Mariem ZAOUALI
 
Chap2 Les conteneurs en python
Chap2 Les conteneurs en pythonChap2 Les conteneurs en python
Chap2 Les conteneurs en python
Mariem ZAOUALI
 
Chap1 Introduction à python
Chap1 Introduction à pythonChap1 Introduction à python
Chap1 Introduction à python
Mariem ZAOUALI
 
Tp1 design patternappliques
Tp1 design patternappliquesTp1 design patternappliques
Tp1 design patternappliques
Mariem ZAOUALI
 
TP2 RMI
TP2 RMITP2 RMI
Cours 4 intergiciels orientes messages jms
Cours 4 intergiciels orientes messages  jmsCours 4 intergiciels orientes messages  jms
Cours 4 intergiciels orientes messages jms
Mariem ZAOUALI
 
Cours 2 les architectures reparties
Cours 2 les architectures repartiesCours 2 les architectures reparties
Cours 2 les architectures reparties
Mariem ZAOUALI
 
Cours 3 les objets distants rmi corba
Cours 3 les objets distants rmi corbaCours 3 les objets distants rmi corba
Cours 3 les objets distants rmi corba
Mariem ZAOUALI
 
Cours 1 les principes de base
Cours 1 les principes de baseCours 1 les principes de base
Cours 1 les principes de base
Mariem ZAOUALI
 
TP1 Traitement d'images Génie Logiciel avec Matlab
TP1 Traitement d'images Génie Logiciel avec MatlabTP1 Traitement d'images Génie Logiciel avec Matlab
TP1 Traitement d'images Génie Logiciel avec Matlab
Mariem ZAOUALI
 
Comment retrouver la forme récursive
Comment retrouver la forme récursiveComment retrouver la forme récursive
Comment retrouver la forme récursive
Mariem ZAOUALI
 
Correction TP4 Atelier C++ /GL2 INSAT / Tunisie
Correction TP4 Atelier C++ /GL2 INSAT / TunisieCorrection TP4 Atelier C++ /GL2 INSAT / Tunisie
Correction TP4 Atelier C++ /GL2 INSAT / Tunisie
Mariem ZAOUALI
 
TP4 Atelier C++ /GL2 INSAT / Tunisie
TP4 Atelier C++ /GL2 INSAT / TunisieTP4 Atelier C++ /GL2 INSAT / Tunisie
TP4 Atelier C++ /GL2 INSAT / Tunisie
Mariem ZAOUALI
 
TP3 Atelier C++/ GL2 INSAT / Tunisie
TP3 Atelier C++/ GL2 INSAT / TunisieTP3 Atelier C++/ GL2 INSAT / Tunisie
TP3 Atelier C++/ GL2 INSAT / Tunisie
Mariem ZAOUALI
 
TP2 Atelier C++/ GL2 INSAT / Tunisie
TP2 Atelier C++/ GL2 INSAT / TunisieTP2 Atelier C++/ GL2 INSAT / Tunisie
TP2 Atelier C++/ GL2 INSAT / Tunisie
Mariem ZAOUALI
 
TP1 Atelier C++/ GL2 INSAT / Tunisie
TP1 Atelier C++/ GL2 INSAT / TunisieTP1 Atelier C++/ GL2 INSAT / Tunisie
TP1 Atelier C++/ GL2 INSAT / Tunisie
Mariem ZAOUALI
 
Graduation Project Presentation _ INSAT Tunisia
Graduation Project Presentation _ INSAT Tunisia Graduation Project Presentation _ INSAT Tunisia
Graduation Project Presentation _ INSAT Tunisia Mariem ZAOUALI
 

Plus de Mariem ZAOUALI (18)

Chap6 Manipulation des fichiers
Chap6 Manipulation des fichiers Chap6 Manipulation des fichiers
Chap6 Manipulation des fichiers
 
Chap3 programmation modulaire en python
Chap3 programmation modulaire en pythonChap3 programmation modulaire en python
Chap3 programmation modulaire en python
 
Chap2 Les conteneurs en python
Chap2 Les conteneurs en pythonChap2 Les conteneurs en python
Chap2 Les conteneurs en python
 
Chap1 Introduction à python
Chap1 Introduction à pythonChap1 Introduction à python
Chap1 Introduction à python
 
Tp1 design patternappliques
Tp1 design patternappliquesTp1 design patternappliques
Tp1 design patternappliques
 
TP2 RMI
TP2 RMITP2 RMI
TP2 RMI
 
Cours 4 intergiciels orientes messages jms
Cours 4 intergiciels orientes messages  jmsCours 4 intergiciels orientes messages  jms
Cours 4 intergiciels orientes messages jms
 
Cours 2 les architectures reparties
Cours 2 les architectures repartiesCours 2 les architectures reparties
Cours 2 les architectures reparties
 
Cours 3 les objets distants rmi corba
Cours 3 les objets distants rmi corbaCours 3 les objets distants rmi corba
Cours 3 les objets distants rmi corba
 
Cours 1 les principes de base
Cours 1 les principes de baseCours 1 les principes de base
Cours 1 les principes de base
 
TP1 Traitement d'images Génie Logiciel avec Matlab
TP1 Traitement d'images Génie Logiciel avec MatlabTP1 Traitement d'images Génie Logiciel avec Matlab
TP1 Traitement d'images Génie Logiciel avec Matlab
 
Comment retrouver la forme récursive
Comment retrouver la forme récursiveComment retrouver la forme récursive
Comment retrouver la forme récursive
 
Correction TP4 Atelier C++ /GL2 INSAT / Tunisie
Correction TP4 Atelier C++ /GL2 INSAT / TunisieCorrection TP4 Atelier C++ /GL2 INSAT / Tunisie
Correction TP4 Atelier C++ /GL2 INSAT / Tunisie
 
TP4 Atelier C++ /GL2 INSAT / Tunisie
TP4 Atelier C++ /GL2 INSAT / TunisieTP4 Atelier C++ /GL2 INSAT / Tunisie
TP4 Atelier C++ /GL2 INSAT / Tunisie
 
TP3 Atelier C++/ GL2 INSAT / Tunisie
TP3 Atelier C++/ GL2 INSAT / TunisieTP3 Atelier C++/ GL2 INSAT / Tunisie
TP3 Atelier C++/ GL2 INSAT / Tunisie
 
TP2 Atelier C++/ GL2 INSAT / Tunisie
TP2 Atelier C++/ GL2 INSAT / TunisieTP2 Atelier C++/ GL2 INSAT / Tunisie
TP2 Atelier C++/ GL2 INSAT / Tunisie
 
TP1 Atelier C++/ GL2 INSAT / Tunisie
TP1 Atelier C++/ GL2 INSAT / TunisieTP1 Atelier C++/ GL2 INSAT / Tunisie
TP1 Atelier C++/ GL2 INSAT / Tunisie
 
Graduation Project Presentation _ INSAT Tunisia
Graduation Project Presentation _ INSAT Tunisia Graduation Project Presentation _ INSAT Tunisia
Graduation Project Presentation _ INSAT Tunisia
 

Dernier

BATIMENT 5.pptx. Fil français tourné en France
BATIMENT 5.pptx. Fil français tourné en FranceBATIMENT 5.pptx. Fil français tourné en France
BATIMENT 5.pptx. Fil français tourné en France
Txaruka
 
Proyecto Erasmus Jardineros y jardineras de paz
Proyecto Erasmus Jardineros y jardineras de pazProyecto Erasmus Jardineros y jardineras de paz
Proyecto Erasmus Jardineros y jardineras de paz
Morzadec Cécile
 
Textes de famille concernant les guerres V2.pdf
Textes de famille concernant les guerres V2.pdfTextes de famille concernant les guerres V2.pdf
Textes de famille concernant les guerres V2.pdf
Michel Bruley
 
Bibliothèque de L'Union - Bilan de l'année 2023
Bibliothèque de L'Union - Bilan de l'année 2023Bibliothèque de L'Union - Bilan de l'année 2023
Bibliothèque de L'Union - Bilan de l'année 2023
Bibliothèque de L'Union
 
Veille Audocdi 90 - mois de juin 2024.pdf
Veille Audocdi 90 - mois de juin 2024.pdfVeille Audocdi 90 - mois de juin 2024.pdf
Veille Audocdi 90 - mois de juin 2024.pdf
frizzole
 
Presentation powerpoint sur la filiere electrotechnique
Presentation powerpoint sur la filiere electrotechniquePresentation powerpoint sur la filiere electrotechnique
Presentation powerpoint sur la filiere electrotechnique
mohammadaminejouini
 
Dimensionnement réseau de transmission pour un réseau GSM-R - AIT KADDOUR Ghi...
Dimensionnement réseau de transmission pour un réseau GSM-R - AIT KADDOUR Ghi...Dimensionnement réseau de transmission pour un réseau GSM-R - AIT KADDOUR Ghi...
Dimensionnement réseau de transmission pour un réseau GSM-R - AIT KADDOUR Ghi...
MustaphaZhiri
 

Dernier (7)

BATIMENT 5.pptx. Fil français tourné en France
BATIMENT 5.pptx. Fil français tourné en FranceBATIMENT 5.pptx. Fil français tourné en France
BATIMENT 5.pptx. Fil français tourné en France
 
Proyecto Erasmus Jardineros y jardineras de paz
Proyecto Erasmus Jardineros y jardineras de pazProyecto Erasmus Jardineros y jardineras de paz
Proyecto Erasmus Jardineros y jardineras de paz
 
Textes de famille concernant les guerres V2.pdf
Textes de famille concernant les guerres V2.pdfTextes de famille concernant les guerres V2.pdf
Textes de famille concernant les guerres V2.pdf
 
Bibliothèque de L'Union - Bilan de l'année 2023
Bibliothèque de L'Union - Bilan de l'année 2023Bibliothèque de L'Union - Bilan de l'année 2023
Bibliothèque de L'Union - Bilan de l'année 2023
 
Veille Audocdi 90 - mois de juin 2024.pdf
Veille Audocdi 90 - mois de juin 2024.pdfVeille Audocdi 90 - mois de juin 2024.pdf
Veille Audocdi 90 - mois de juin 2024.pdf
 
Presentation powerpoint sur la filiere electrotechnique
Presentation powerpoint sur la filiere electrotechniquePresentation powerpoint sur la filiere electrotechnique
Presentation powerpoint sur la filiere electrotechnique
 
Dimensionnement réseau de transmission pour un réseau GSM-R - AIT KADDOUR Ghi...
Dimensionnement réseau de transmission pour un réseau GSM-R - AIT KADDOUR Ghi...Dimensionnement réseau de transmission pour un réseau GSM-R - AIT KADDOUR Ghi...
Dimensionnement réseau de transmission pour un réseau GSM-R - AIT KADDOUR Ghi...
 

Chap4 Récursivité en python

  • 1. [LA RECURSIVITE EN PYTHON] ESPRIMS’ Mariem ZAOUALI | Chapitre 4 : La récursivité en Python 1 Chapitre 4 : La récursivité en Python • Définition de la récursivité • Comparaison entre l’itératif et le récursif 1. Définition de la récursivité et comparaison entre l’itératif et le récursif a. La récursivité Pour minimiser la complexité de compréhension d’un problème, on opte pour sa décomposition en des sous-problèmes moins complexes. Ce qui fait que la résolution du grand problème revient à résoudre ceux des sous-problèmes (L’algorithme va s’appeler lui-même pour résoudre les sous-problèmes) La notion proche en mathématique à cette démarche est le raisonnement par récurrence. Une fonction est dite récursive si elle s’appelle elle-même. Il faut prévoir toujours une condition d’arrêt pour stopper les appels récursifs sinon on obtient un traitement similaire à une boucle infinie. Exemple : Un appel récursif induit lui-même à d’autres appels récursifs, ce qui peut mener à un nombre infini d’appels. Il faut arrêter la suite des appels ! Dans notre cas, on sait que 0!=1, une fois n atteint la valeur 0, le processus d’appel doit s’arrêter: Python utilise une pile d’exécution pour enregistrer les appels et leurs contextes (paramètres utilisés, résultats rendus, variables locales déclarées par chacun des appels…). Mais la taille de la pille n’est illimitée! Elle peut déborder et donc elle déclenche une exception. La pile d’exécution de l’appel de fact avec n=3 a l’allure suivante:
  • 2. [LA RECURSIVITE EN PYTHON] ESPRIMS’ Mariem ZAOUALI | Chapitre 4 : La récursivité en Python 2 D’une manière générale, pour obtenir une solution récursive à un problème  On paramètre le problème  On décompose le problème  On détermine la condition d’arrêt qui arrête les énoncés récursifs Dans le cas de la factorielle, la relation entre le cas simple et le cas général est la réduction des données n!=n*(n-1)! Mais ce n’est pas toujours qu’on attend une valeur! Parfois la fonction ne retourne aucune valeur mais effectue des actions récursives comme par exemple le cas d’affichage d’une liste ou son inversion  Exemple 1 :  Exécution  Exemple 2 :
  • 3. [LA RECURSIVITE EN PYTHON] ESPRIMS’ Mariem ZAOUALI | Chapitre 4 : La récursivité en Python 3  Exécution b. Itératif vs récursif Toute solution récursive peut avoir une solution itérative équivalente. La version récursive augmente la complexité algorithmique par rapport à la version itérative d’où une augmentation du temps du calcul. L’avantage de la récursivité réside au niveau de l’abstraction. Il suffit de décrire la solution au problème à partir d’un cas simple. Ce style de programmation est appelé déclaratif. On utilise la récursivité si:  Le raisonnement du problème est lui-même récursif.  La structure de données utilisée est récursive(une liste peut être vue comme un élément suivi d’une autre liste). c. Exemple de raisonnement récursif : les tours de Hanoï Il s’agit d’un jeu où on va déplacer les disques d’un point de départ vers une destination. Nous disposons donc de : • 3 bâtons : A,B,C • 3 disques de différentes tailles déposés les uns sur les autres, du plus grand au plus petit en terme de diamètre • 2 Règles à suivre : o Déplacer un disque à la fois d’un bâton à un autre o Ne jamais mettre un disque sur un plus petit disque
  • 4. [LA RECURSIVITE EN PYTHON] ESPRIMS’ Mariem ZAOUALI | Chapitre 4 : La récursivité en Python 4 Exemple : 1. Mettre tous les disques sauf le plus grand sur C 2. Déplacer le plus grand disque de A vers B 3. Mettre tous les disques de C sur B Les points 1 et 2 de la solution esquissée sont des problèmes de Hanoï avec un disque de moins. Si on sait résoudre un problème avec n-1 disques, alors on sait le résoudre avec n disques. Or, on sait résoudre le problème avec 1 disque. Le problème est résolu pour tout nombre n≥1 de disques. La solution est récursive. Raisonnement :  Cas de n=2  On déplace le petit disque de A vers C  On déplace le grand disque de A vers B  On déplace le petit disque de C vers B Donc, on a utilisé 3 déplacements pour résoudre le problème  Cas général  Déplacer les n-1 premier disques (D1,D2,..Dn-1) du pilier gauche vers le pilier intermédiaire  Déplacer le grand disque Dn du pilier gauche au pilier au centre  Et déplacer les n-1 disques du pilier intermédiaire vers le pilier au centre
  • 5. [LA RECURSIVITE EN PYTHON] ESPRIMS’ Mariem ZAOUALI | Chapitre 4 : La récursivité en Python 5 En python, la solution est : d. Type de récursivité  Simple: La fonction récursive s’appelle elle-même une seule fois (calcul de la factorielle)  Multiple: La fonction s’appelle elle-même plusieurs fois dans un même appel récursif (calcul d’une combinaison)  Croisée: Deux fonctions récursive chacune appelant l’autre (exemple nombre pair et nombre impair)  Imbriquée: l’appel est une imbrication d’appel (suite Ackermann)
  • 6. [LA RECURSIVITE EN PYTHON] ESPRIMS’ Mariem ZAOUALI | Chapitre 4 : La récursivité en Python 6  Terminale VS non terminale: quand l’appel récursif nécessite des instructions de calcul autre que l’appel de la fonction elle-même, on parle de récursivité non terminale 2. Applications 1. Donner la version récursive de la suite de Fibbonacci 2. Donner la version itérative et récursive de la fonction qui permet, pour deux entier positifs a et b, de retourner « vrai » si a divise b et faux sinon. Indication : test avec a=2 et b=8. On retranche de b la valeur a tant que a<b. Si on trouve a=b c’est bien 2 est diviseur de 8! 3. Ecrire une fonction récursive permettant de convertir un nombre N donné (base 10) en une base b (2<=b<=10)