SlideShare una empresa de Scribd logo
1 de 18
NB : Téléchargez la présentation pour voir l’animation
 Ecrire une fonction récursive en C qui
permet de convertir un entier en binaire
 L’astuce est la suivante : Soit 42 est l’entier à
convertir, sa conversion binaire est 101010
 Soit:
42 2
210 2
1 10
0
2
5
1
2
2 2
21
0
1 0
Le résultat de 42 est 101010 (lecture
inverse des restes)
1 – La première étape pour établir une
forme récursive est de chercher une
condition d’arrêt : Quand dois-je
m’arrêter? Sinon l’appel récursif sera
infini ou finira avec une erreur!
 Dans ce cas, la condition d’arrêt est lorsque
je trouve un « 0 » comme quotient
42 2
210 2
1 10
0
2
5
1
2
2 2
21
0
1 0
 Ainsi la première forme de notre fonction
récursive est la suivante
int Binaire (int nbre_a_convertir){
if(nbre_a_convertir / 2 == 0)
return nbre_a_convertir % 2;
}
 La question qui se pose maintenant est :
comment atteindre cette condition d’arrêt?
 Il faut trouver un lien entre le nombre à
entrer au départ et la condition d’arrêt.
 Dresser l’arbre de dépendance entre les
appels récursifs
Binaire(42)
Binaire(21)
Binaire(10)
Binaire(5)
Binaire(2)
Binaire(1)
 Dresser l’arbre de dépendance entre les
appels récursifs
Binaire(42)
Binaire(21)
Binaire(10)
Binaire(5)
Binaire(2)
Binaire(1) Retourne 1 : le reste
Fait appel à Binaire(1)
Fait appel à Binaire(2)
Fait appel à Binaire(5)
Fait appel à Binaire(10)
Fait appel à Binaire(21)
Pour passer de
42 à 21 il faut
prendre le
quotient de 42/2
La même chose pour les
autres : pour passer d’un appel
à un autre il faut passer le
quotient du nombre courant
 Ca veut dire
Binaire(42)
Binaire(21)
Binaire(10)
Binaire(5)
Binaire(2)
Binaire(1) Retourne 1 : le reste
Fait appel à Binaire(2 DIV 2)
Fait appel à Binaire(5 DIV 2)
Fait appel à Binaire(10 DIV 2)
Fait appel à Binaire(21 DIV 2)
Fait appel à Binaire(42 DIV 2)
 Ainsi la nouvelle forme de la méthode
récursive est
int Binaire (int nbre_a_convertir){
if(nbre_a_convertir / 2 == 0)
return nbre_a_convertir % 2;
else
return Binaire(nbre_a_convertir/2);
}
 Testez votre méthode : le résultat de 42 sera
1 .. Où sont passés les autres chiffres?
 Tel qu’on a écrit la méthode, nous ne
sommes pas entrain de sauvegarder les
résultats des états intermédiaires avant
d’atteindre la condition d’arrêt
 Pour ne pas les perdre, on suggère de
multiplier par 10 l’appel récursif
 Pourquoi?
› On remarque que le premier nombre à être
retourné est celui de la condition d’arrêt et c’est
bien le premier nombre à gauche du résultat soit
101010
› Voyons comment le résultat se forme
 Dresser l’arbre de dépendance entre les
appels récursifs
Binaire(42)
Binaire(21)
Binaire(10)
Binaire(5)
Binaire(2)
Binaire(1) Retourne 1 : le reste
Fait appel à Binaire(1)*10 et retourne 1*10=10
Fait appel à Binaire(2)*10 et retourne 10*10=100
Fait appel à Binaire(5)*10 et retourne
100*10=1000
Fait appel à Binaire(10)*10 et
retourne 1000*10=10000
Fait appel à Binaire(21)*10 et
retourne 10000*10=10000
 Chouette ! On a pu décaler le 1 à gauche
mais le résultat est à côté de la plaque …
 Que faire?
› Ici il faut remarquer une nouvelle caractéristique
(pour la découvrir il faut tester sur votre brouillon
la conversion de plusieurs nombres pour pouvoir
la détecter)
 Remarquez le lien entre 4DIV2=2 et 4
› 10 et 100 (10*10=100)
 Remarquez le lien entre 8DIV2=4 et 8
› 100 et 1000 (100*10=1000)
 Remarquez le lien entre 16DIV2=8 et 16
› 1000 et 10000 (1000*10=10000)
› On peut dire que si j’ai le nombre binaire d’un
nombre entier pair alors il suffit de le multiplier par 10
pour trouver le nombre binaire de son double
 Remarquez le lien entre 5DIV2=2 et 5
› 10 et 101 (10*10 +1 =101)
 Remarquez le lien entre 7DIV2=3 et 7
› 11 et 111 (11*10+1=111)
 Remarquez le lien entre 9DIV2=4 et 9
› 100 et 1001 (100*10+1=1001)
› On peut dire que si j’ai le nombre binaire d’un
nombre entier impair, il faut prendre le nombre
binaire du quotient de sa division par 2 le multiplier
par 10 et le rajouter 1
 La forme finale de notre méthode est :
int Binaire (int nbre_a_convertir){
if(nbre_a_convertir / 2 == 0)
return nbre_a_convertir % 2;
else if (n % 2 == 0) // n est pair
return Binaire(nbre_a_convertir/2)*10;
else
return Binaire(nbre_a_convertir/2)*10+1;
}
else
return Binaire(nbre_a_convertir/2);
}
 Übung macht den Meister !
› En s’exerçant on devient « maître »
› Pour comprendre la récursivité, défiez-vous avec
plusieurs exercices
› Bon courage!

Más contenido relacionado

Similar a Comment retrouver la forme récursive

Chapitre-2_SYSTEMES DE NUMERATION ET CODAGE.pdf
Chapitre-2_SYSTEMES DE NUMERATION ET CODAGE.pdfChapitre-2_SYSTEMES DE NUMERATION ET CODAGE.pdf
Chapitre-2_SYSTEMES DE NUMERATION ET CODAGE.pdfRazaneLAMARA
 
Projet d'Analyse Numérique
Projet d'Analyse NumériqueProjet d'Analyse Numérique
Projet d'Analyse NumériqueYassineElaroui2
 
Python avancé : Ensemble, dictionnaire et base de données
Python avancé : Ensemble, dictionnaire et base de donnéesPython avancé : Ensemble, dictionnaire et base de données
Python avancé : Ensemble, dictionnaire et base de donnéesECAM Brussels Engineering School
 
INF120 - Algo DUT SRC1 - Cours 2 (2012)
INF120 - Algo DUT SRC1 - Cours 2 (2012)INF120 - Algo DUT SRC1 - Cours 2 (2012)
INF120 - Algo DUT SRC1 - Cours 2 (2012)PGambette
 

Similar a Comment retrouver la forme récursive (8)

Chapitre-2_SYSTEMES DE NUMERATION ET CODAGE.pdf
Chapitre-2_SYSTEMES DE NUMERATION ET CODAGE.pdfChapitre-2_SYSTEMES DE NUMERATION ET CODAGE.pdf
Chapitre-2_SYSTEMES DE NUMERATION ET CODAGE.pdf
 
CODAGE.pptx
CODAGE.pptxCODAGE.pptx
CODAGE.pptx
 
Projet d'Analyse Numérique
Projet d'Analyse NumériqueProjet d'Analyse Numérique
Projet d'Analyse Numérique
 
02 correction-td smi-s3-algo2
02 correction-td smi-s3-algo202 correction-td smi-s3-algo2
02 correction-td smi-s3-algo2
 
Récursivité
RécursivitéRécursivité
Récursivité
 
Python avancé : Ensemble, dictionnaire et base de données
Python avancé : Ensemble, dictionnaire et base de donnéesPython avancé : Ensemble, dictionnaire et base de données
Python avancé : Ensemble, dictionnaire et base de données
 
INF120 - Algo DUT SRC1 - Cours 2 (2012)
INF120 - Algo DUT SRC1 - Cours 2 (2012)INF120 - Algo DUT SRC1 - Cours 2 (2012)
INF120 - Algo DUT SRC1 - Cours 2 (2012)
 
Doc
DocDoc
Doc
 

Más de Mariem ZAOUALI

Chap5 La manipulation des iterables en python
Chap5 La manipulation des iterables en pythonChap5 La manipulation des iterables en python
Chap5 La manipulation des iterables en pythonMariem ZAOUALI
 
Chap6 Manipulation des fichiers
Chap6 Manipulation des fichiers Chap6 Manipulation des fichiers
Chap6 Manipulation des fichiers Mariem ZAOUALI
 
Chap7 simulation numérique
Chap7 simulation numériqueChap7 simulation numérique
Chap7 simulation numériqueMariem ZAOUALI
 
Chap4 Récursivité en python
Chap4 Récursivité en pythonChap4 Récursivité en python
Chap4 Récursivité en pythonMariem ZAOUALI
 
Chap3 programmation modulaire en python
Chap3 programmation modulaire en pythonChap3 programmation modulaire en python
Chap3 programmation modulaire en pythonMariem ZAOUALI
 
Chap2 Les conteneurs en python
Chap2 Les conteneurs en pythonChap2 Les conteneurs en python
Chap2 Les conteneurs en pythonMariem ZAOUALI
 
Chap1 Introduction à python
Chap1 Introduction à pythonChap1 Introduction à python
Chap1 Introduction à pythonMariem ZAOUALI
 
Tp1 design patternappliques
Tp1 design patternappliquesTp1 design patternappliques
Tp1 design patternappliquesMariem ZAOUALI
 
Cours 4 intergiciels orientes messages jms
Cours 4 intergiciels orientes messages  jmsCours 4 intergiciels orientes messages  jms
Cours 4 intergiciels orientes messages jmsMariem ZAOUALI
 
Cours 2 les architectures reparties
Cours 2 les architectures repartiesCours 2 les architectures reparties
Cours 2 les architectures repartiesMariem 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 corbaMariem ZAOUALI
 
Cours 1 les principes de base
Cours 1 les principes de baseCours 1 les principes de base
Cours 1 les principes de baseMariem 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 MatlabMariem 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 / TunisieMariem ZAOUALI
 
TP4 Atelier C++ /GL2 INSAT / Tunisie
TP4 Atelier C++ /GL2 INSAT / TunisieTP4 Atelier C++ /GL2 INSAT / Tunisie
TP4 Atelier C++ /GL2 INSAT / TunisieMariem ZAOUALI
 
TP3 Atelier C++/ GL2 INSAT / Tunisie
TP3 Atelier C++/ GL2 INSAT / TunisieTP3 Atelier C++/ GL2 INSAT / Tunisie
TP3 Atelier C++/ GL2 INSAT / TunisieMariem ZAOUALI
 
TP2 Atelier C++/ GL2 INSAT / Tunisie
TP2 Atelier C++/ GL2 INSAT / TunisieTP2 Atelier C++/ GL2 INSAT / Tunisie
TP2 Atelier C++/ GL2 INSAT / TunisieMariem ZAOUALI
 
TP1 Atelier C++/ GL2 INSAT / Tunisie
TP1 Atelier C++/ GL2 INSAT / TunisieTP1 Atelier C++/ GL2 INSAT / Tunisie
TP1 Atelier C++/ GL2 INSAT / TunisieMariem ZAOUALI
 
Graduation Project Presentation _ INSAT Tunisia
Graduation Project Presentation _ INSAT Tunisia Graduation Project Presentation _ INSAT Tunisia
Graduation Project Presentation _ INSAT Tunisia Mariem ZAOUALI
 

Más de Mariem ZAOUALI (20)

Chap5 La manipulation des iterables en python
Chap5 La manipulation des iterables en pythonChap5 La manipulation des iterables en python
Chap5 La manipulation des iterables en python
 
Chap6 Manipulation des fichiers
Chap6 Manipulation des fichiers Chap6 Manipulation des fichiers
Chap6 Manipulation des fichiers
 
Chap7 simulation numérique
Chap7 simulation numériqueChap7 simulation numérique
Chap7 simulation numérique
 
Chap4 Récursivité en python
Chap4 Récursivité en pythonChap4 Récursivité en python
Chap4 Récursivité en python
 
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
 
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
 

Último

conception d'un batiment r+4 comparative de defferente ariante de plancher
conception d'un  batiment  r+4 comparative de defferente ariante de plancherconception d'un  batiment  r+4 comparative de defferente ariante de plancher
conception d'un batiment r+4 comparative de defferente ariante de planchermansouriahlam
 
optimisation logistique MLT_231102_155827.pdf
optimisation logistique  MLT_231102_155827.pdfoptimisation logistique  MLT_231102_155827.pdf
optimisation logistique MLT_231102_155827.pdfSoukainaMounawir
 
firefly algoriyhm sac a dos step by step .pdf
firefly algoriyhm sac a dos step by step .pdffirefly algoriyhm sac a dos step by step .pdf
firefly algoriyhm sac a dos step by step .pdffirstjob4
 
Algo II: les files cours + exercices corrigés
Algo II: les files cours + exercices corrigésAlgo II: les files cours + exercices corrigés
Algo II: les files cours + exercices corrigésSana REFAI
 
comprehension de DDMRP dans le domaine de gestion
comprehension de DDMRP dans le domaine de gestioncomprehension de DDMRP dans le domaine de gestion
comprehension de DDMRP dans le domaine de gestionyakinekaidouchi1
 
Présentation_Soirée-Information_ Surverse_Thibert _30 avril 2024
Présentation_Soirée-Information_ Surverse_Thibert _30 avril 2024Présentation_Soirée-Information_ Surverse_Thibert _30 avril 2024
Présentation_Soirée-Information_ Surverse_Thibert _30 avril 2024Ville de Châteauguay
 

Último (7)

conception d'un batiment r+4 comparative de defferente ariante de plancher
conception d'un  batiment  r+4 comparative de defferente ariante de plancherconception d'un  batiment  r+4 comparative de defferente ariante de plancher
conception d'un batiment r+4 comparative de defferente ariante de plancher
 
optimisation logistique MLT_231102_155827.pdf
optimisation logistique  MLT_231102_155827.pdfoptimisation logistique  MLT_231102_155827.pdf
optimisation logistique MLT_231102_155827.pdf
 
firefly algoriyhm sac a dos step by step .pdf
firefly algoriyhm sac a dos step by step .pdffirefly algoriyhm sac a dos step by step .pdf
firefly algoriyhm sac a dos step by step .pdf
 
JTC 2024 Bâtiment et Photovoltaïque.pdf
JTC 2024  Bâtiment et Photovoltaïque.pdfJTC 2024  Bâtiment et Photovoltaïque.pdf
JTC 2024 Bâtiment et Photovoltaïque.pdf
 
Algo II: les files cours + exercices corrigés
Algo II: les files cours + exercices corrigésAlgo II: les files cours + exercices corrigés
Algo II: les files cours + exercices corrigés
 
comprehension de DDMRP dans le domaine de gestion
comprehension de DDMRP dans le domaine de gestioncomprehension de DDMRP dans le domaine de gestion
comprehension de DDMRP dans le domaine de gestion
 
Présentation_Soirée-Information_ Surverse_Thibert _30 avril 2024
Présentation_Soirée-Information_ Surverse_Thibert _30 avril 2024Présentation_Soirée-Information_ Surverse_Thibert _30 avril 2024
Présentation_Soirée-Information_ Surverse_Thibert _30 avril 2024
 

Comment retrouver la forme récursive

  • 1. NB : Téléchargez la présentation pour voir l’animation
  • 2.  Ecrire une fonction récursive en C qui permet de convertir un entier en binaire  L’astuce est la suivante : Soit 42 est l’entier à convertir, sa conversion binaire est 101010
  • 3.  Soit: 42 2 210 2 1 10 0 2 5 1 2 2 2 21 0 1 0 Le résultat de 42 est 101010 (lecture inverse des restes) 1 – La première étape pour établir une forme récursive est de chercher une condition d’arrêt : Quand dois-je m’arrêter? Sinon l’appel récursif sera infini ou finira avec une erreur!
  • 4.  Dans ce cas, la condition d’arrêt est lorsque je trouve un « 0 » comme quotient 42 2 210 2 1 10 0 2 5 1 2 2 2 21 0 1 0
  • 5.  Ainsi la première forme de notre fonction récursive est la suivante int Binaire (int nbre_a_convertir){ if(nbre_a_convertir / 2 == 0) return nbre_a_convertir % 2; }  La question qui se pose maintenant est : comment atteindre cette condition d’arrêt?
  • 6.  Il faut trouver un lien entre le nombre à entrer au départ et la condition d’arrêt.
  • 7.  Dresser l’arbre de dépendance entre les appels récursifs Binaire(42) Binaire(21) Binaire(10) Binaire(5) Binaire(2) Binaire(1)
  • 8.  Dresser l’arbre de dépendance entre les appels récursifs Binaire(42) Binaire(21) Binaire(10) Binaire(5) Binaire(2) Binaire(1) Retourne 1 : le reste Fait appel à Binaire(1) Fait appel à Binaire(2) Fait appel à Binaire(5) Fait appel à Binaire(10) Fait appel à Binaire(21) Pour passer de 42 à 21 il faut prendre le quotient de 42/2 La même chose pour les autres : pour passer d’un appel à un autre il faut passer le quotient du nombre courant
  • 9.  Ca veut dire Binaire(42) Binaire(21) Binaire(10) Binaire(5) Binaire(2) Binaire(1) Retourne 1 : le reste Fait appel à Binaire(2 DIV 2) Fait appel à Binaire(5 DIV 2) Fait appel à Binaire(10 DIV 2) Fait appel à Binaire(21 DIV 2) Fait appel à Binaire(42 DIV 2)
  • 10.  Ainsi la nouvelle forme de la méthode récursive est int Binaire (int nbre_a_convertir){ if(nbre_a_convertir / 2 == 0) return nbre_a_convertir % 2; else return Binaire(nbre_a_convertir/2); }
  • 11.  Testez votre méthode : le résultat de 42 sera 1 .. Où sont passés les autres chiffres?  Tel qu’on a écrit la méthode, nous ne sommes pas entrain de sauvegarder les résultats des états intermédiaires avant d’atteindre la condition d’arrêt
  • 12.  Pour ne pas les perdre, on suggère de multiplier par 10 l’appel récursif  Pourquoi? › On remarque que le premier nombre à être retourné est celui de la condition d’arrêt et c’est bien le premier nombre à gauche du résultat soit 101010 › Voyons comment le résultat se forme
  • 13.  Dresser l’arbre de dépendance entre les appels récursifs Binaire(42) Binaire(21) Binaire(10) Binaire(5) Binaire(2) Binaire(1) Retourne 1 : le reste Fait appel à Binaire(1)*10 et retourne 1*10=10 Fait appel à Binaire(2)*10 et retourne 10*10=100 Fait appel à Binaire(5)*10 et retourne 100*10=1000 Fait appel à Binaire(10)*10 et retourne 1000*10=10000 Fait appel à Binaire(21)*10 et retourne 10000*10=10000
  • 14.  Chouette ! On a pu décaler le 1 à gauche mais le résultat est à côté de la plaque …  Que faire? › Ici il faut remarquer une nouvelle caractéristique (pour la découvrir il faut tester sur votre brouillon la conversion de plusieurs nombres pour pouvoir la détecter)
  • 15.  Remarquez le lien entre 4DIV2=2 et 4 › 10 et 100 (10*10=100)  Remarquez le lien entre 8DIV2=4 et 8 › 100 et 1000 (100*10=1000)  Remarquez le lien entre 16DIV2=8 et 16 › 1000 et 10000 (1000*10=10000) › On peut dire que si j’ai le nombre binaire d’un nombre entier pair alors il suffit de le multiplier par 10 pour trouver le nombre binaire de son double
  • 16.  Remarquez le lien entre 5DIV2=2 et 5 › 10 et 101 (10*10 +1 =101)  Remarquez le lien entre 7DIV2=3 et 7 › 11 et 111 (11*10+1=111)  Remarquez le lien entre 9DIV2=4 et 9 › 100 et 1001 (100*10+1=1001) › On peut dire que si j’ai le nombre binaire d’un nombre entier impair, il faut prendre le nombre binaire du quotient de sa division par 2 le multiplier par 10 et le rajouter 1
  • 17.  La forme finale de notre méthode est : int Binaire (int nbre_a_convertir){ if(nbre_a_convertir / 2 == 0) return nbre_a_convertir % 2; else if (n % 2 == 0) // n est pair return Binaire(nbre_a_convertir/2)*10; else return Binaire(nbre_a_convertir/2)*10+1; } else return Binaire(nbre_a_convertir/2); }
  • 18.  Übung macht den Meister ! › En s’exerçant on devient « maître » › Pour comprendre la récursivité, défiez-vous avec plusieurs exercices › Bon courage!