SlideShare une entreprise Scribd logo
2
Plus lue
3
Plus lue
4
Plus lue
[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

PDF
Chap5 La manipulation des iterables en python
PDF
Mes devoirs 4 si
PDF
Récursivité
PDF
Python avancé : Ensemble, dictionnaire et base de données
PDF
Chapitre 4 récursivité
PPTX
Les algorithmes d’approximation
PDF
Devoirs Algorithme + correction pour 4 si
PPTX
Formation python
Chap5 La manipulation des iterables en python
Mes devoirs 4 si
Récursivité
Python avancé : Ensemble, dictionnaire et base de données
Chapitre 4 récursivité
Les algorithmes d’approximation
Devoirs Algorithme + correction pour 4 si
Formation python

Tendances (20)

PDF
Python avancé : Lecture et écriture de fichiers
PDF
Exercices en turbo pascal sur les nombres
PDF
Serie recurrents & arithmetiques
PDF
récursivité algorithmique et complexité algorithmique et Les algorithmes de tri
PPT
COURS_PYTHON_22.ppt
PDF
PDF
Correction
PDF
Algorithmes de tri
PPSX
Cours Algorithme: Matrice
PDF
02 correction-td smi-s3-algo2
PPTX
Chapitre1: Langage Python
PDF
cours algorithme
PDF
Corrige exercices pascal_fenni_2018
PDF
Les algorithmes d'arithmetique
PDF
Les algorithmes recurrents
PDF
Python avancé : Gestion d'erreurs et mécanisme d'exception
PDF
Algorithmique et programmation en Pascal (résumé)
PDF
Chapitre iii récursivité et paradigme diviser pour régner
PDF
Chapitre iv algorithmes de tri
PDF
Introduction à Python - Achraf Kacimi El Hassani
Python avancé : Lecture et écriture de fichiers
Exercices en turbo pascal sur les nombres
Serie recurrents & arithmetiques
récursivité algorithmique et complexité algorithmique et Les algorithmes de tri
COURS_PYTHON_22.ppt
Correction
Algorithmes de tri
Cours Algorithme: Matrice
02 correction-td smi-s3-algo2
Chapitre1: Langage Python
cours algorithme
Corrige exercices pascal_fenni_2018
Les algorithmes d'arithmetique
Les algorithmes recurrents
Python avancé : Gestion d'erreurs et mécanisme d'exception
Algorithmique et programmation en Pascal (résumé)
Chapitre iii récursivité et paradigme diviser pour régner
Chapitre iv algorithmes de tri
Introduction à Python - Achraf Kacimi El Hassani
Publicité

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

PPTX
Les fonction recursives en Programation C.pptx
PPTX
L3_Programmation_Imperative_avancee.pptx
PDF
chap 3 complexité (3).pdf
PPTX
cours3 - Daa.pptx F6ESQGHYQTDFTYAFYTFTYZFA
PDF
928_NPCompletude master informatique.pdf
PPSX
Complexité d’un algorithme par Monsieur Mahseur.ppsx
PDF
Algorithme d'approximation
PDF
Cours algorithmique et complexite complet
PDF
Cours algorithmique et complexite
PDF
Cours algorithmique et complexite complet
PDF
Un même algorithme peut être écrit python
PPTX
Technique en Algorithme Développer Chapitre 5.pptx
PDF
Oc3 2013
PPTX
ProgrammationLinéaire.pptxProgrammationLinéaire.pptxProgrammationLinéaire....
PDF
Diviser Pour Régner
PDF
Ch2_ la récursivité.pdf
PPTX
chapitre 5.pptx
PDF
optimisation cours.pdf
PDF
Série sous programmes (bac scientifique)
PPTX
la complexité des algorithmes en toute simplicité
Les fonction recursives en Programation C.pptx
L3_Programmation_Imperative_avancee.pptx
chap 3 complexité (3).pdf
cours3 - Daa.pptx F6ESQGHYQTDFTYAFYTFTYZFA
928_NPCompletude master informatique.pdf
Complexité d’un algorithme par Monsieur Mahseur.ppsx
Algorithme d'approximation
Cours algorithmique et complexite complet
Cours algorithmique et complexite
Cours algorithmique et complexite complet
Un même algorithme peut être écrit python
Technique en Algorithme Développer Chapitre 5.pptx
Oc3 2013
ProgrammationLinéaire.pptxProgrammationLinéaire.pptxProgrammationLinéaire....
Diviser Pour Régner
Ch2_ la récursivité.pdf
chapitre 5.pptx
optimisation cours.pdf
Série sous programmes (bac scientifique)
la complexité des algorithmes en toute simplicité
Publicité

Plus de Mariem ZAOUALI (19)

PDF
Chap6 Manipulation des fichiers
PDF
Chap7 simulation numérique
PDF
Chap3 programmation modulaire en python
PDF
Chap2 Les conteneurs en python
PDF
Chap1 Introduction à python
PDF
Tp1 design patternappliques
PDF
PDF
Cours 4 intergiciels orientes messages jms
PDF
Cours 2 les architectures reparties
PDF
Cours 3 les objets distants rmi corba
PDF
Cours 1 les principes de base
PDF
TP1 Traitement d'images Génie Logiciel avec Matlab
PPTX
Comment retrouver la forme récursive
PDF
Correction TP4 Atelier C++ /GL2 INSAT / Tunisie
PDF
TP4 Atelier C++ /GL2 INSAT / Tunisie
PDF
TP3 Atelier C++/ GL2 INSAT / Tunisie
PDF
TP2 Atelier C++/ GL2 INSAT / Tunisie
PDF
TP1 Atelier C++/ GL2 INSAT / Tunisie
PPTX
Graduation Project Presentation _ INSAT Tunisia
Chap6 Manipulation des fichiers
Chap7 simulation numérique
Chap3 programmation modulaire en python
Chap2 Les conteneurs en python
Chap1 Introduction à python
Tp1 design patternappliques
Cours 4 intergiciels orientes messages jms
Cours 2 les architectures reparties
Cours 3 les objets distants rmi corba
Cours 1 les principes de base
TP1 Traitement d'images Génie Logiciel avec Matlab
Comment retrouver la forme récursive
Correction TP4 Atelier C++ /GL2 INSAT / Tunisie
TP4 Atelier C++ /GL2 INSAT / Tunisie
TP3 Atelier C++/ GL2 INSAT / Tunisie
TP2 Atelier C++/ GL2 INSAT / Tunisie
TP1 Atelier C++/ GL2 INSAT / Tunisie
Graduation Project Presentation _ INSAT Tunisia

Dernier (20)

PPTX
Informatique pour débutants niveau 1.pptx
PPTX
Copie de Présentation Personal Branding J2025.pptx_20250610_120558_0000.pptx
PPT
diaporama pictogrammes de securité2.ppt
PDF
Referentiel des metiers cadres dans la banque
PPTX
Fondamentaux du LMD.pptx pour les etudiants
PDF
Bac 2026 - Livre - 🎤 Le Grand Oral - ✍️Exemples rédigés - Spécialité: 📊 Mathé...
PPTX
SESSION3-SUPPORT-DE-COURS-FLEC-(Future leader en énergie au Cameroun)-CECOSDA...
PPTX
Bienvenido slides about the first steps in spanish.pptx
PPTX
SESSION5-SUPPORT-DE-COURS-FLEC-(Future leader en énergie au Cameroun)-CECOSDA...
PPTX
Le rendez-vous de l'été.pptx Film français
PPTX
SESSION4-SUPPORT-DE-COURS-FLEC-(Future leader en énergie au Cameroun)-CECOSDA...
PDF
Avis Digital Marketing Elite: Mon Retour d'Expérience Après 3 Mois d'Utilisation
PPTX
le subjonctif présent, Conjugaison français
PPTX
risque environnema et mesure protect.pptx
PDF
585-developpement-d-une-application-avec-python-fr-en-business.pdf
PDF
Bac 2026 - Livre - 🎤 Le Grand Oral - ✍️ Exemples rédigés - Physique ⚡ - Chimi...
PPTX
le-present-de-lindicatif-ou-le-subjonctif-present-exercice-grammatical-feuill...
PPTX
SESSION1-SUPPORT-DE-COURS-FLEC-(Future leader en énergie au Cameroun)-CECOSDA...
PPT
Les moyens de transport-2023.ppt french language teaching ppt
PDF
Bac 2026 - Livre - 🎤 Le Grand Oral - ✍️Exemples rédigés - Spécialité: 💻 NSI -...
Informatique pour débutants niveau 1.pptx
Copie de Présentation Personal Branding J2025.pptx_20250610_120558_0000.pptx
diaporama pictogrammes de securité2.ppt
Referentiel des metiers cadres dans la banque
Fondamentaux du LMD.pptx pour les etudiants
Bac 2026 - Livre - 🎤 Le Grand Oral - ✍️Exemples rédigés - Spécialité: 📊 Mathé...
SESSION3-SUPPORT-DE-COURS-FLEC-(Future leader en énergie au Cameroun)-CECOSDA...
Bienvenido slides about the first steps in spanish.pptx
SESSION5-SUPPORT-DE-COURS-FLEC-(Future leader en énergie au Cameroun)-CECOSDA...
Le rendez-vous de l'été.pptx Film français
SESSION4-SUPPORT-DE-COURS-FLEC-(Future leader en énergie au Cameroun)-CECOSDA...
Avis Digital Marketing Elite: Mon Retour d'Expérience Après 3 Mois d'Utilisation
le subjonctif présent, Conjugaison français
risque environnema et mesure protect.pptx
585-developpement-d-une-application-avec-python-fr-en-business.pdf
Bac 2026 - Livre - 🎤 Le Grand Oral - ✍️ Exemples rédigés - Physique ⚡ - Chimi...
le-present-de-lindicatif-ou-le-subjonctif-present-exercice-grammatical-feuill...
SESSION1-SUPPORT-DE-COURS-FLEC-(Future leader en énergie au Cameroun)-CECOSDA...
Les moyens de transport-2023.ppt french language teaching ppt
Bac 2026 - Livre - 🎤 Le Grand Oral - ✍️Exemples rédigés - Spécialité: 💻 NSI -...

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)