lec 07_récursi

57
Structures de données Leçon n. 1 – Introduction et vue d’ensemble Prof. A. EL FAKER ENSIAS - UNIVERSITE MOHAMMED V SOUISSI eçon n° 7 – Structures de données linéaires : la récursivité STRUCTURES DE DONNÉES

Upload: lopir120

Post on 18-Apr-2015

34 views

Category:

Documents


3 download

TRANSCRIPT

Page 1: Lec 07_Récursi

Structures de donnéesLeçon n. 1 – Introduction et vue d’ensemble

Prof. A. EL FAKERENSIAS - UNIVERSITE MOHAMMED V SOUISSI

Leçon n° 7 – Structures de données linéaires : la récursivité

STRUCTURES DE

DONNÉES

STRUCTURES DE

DONNÉES

Page 2: Lec 07_Récursi

Structures de donnéesLeçon n. 1 – Introduction et vue d’ensemble

Prof. A. EL FAKERENSIAS - UNIVERSITE MOHAMMED V SOUISSI

Leçon n° 7 – Structures de données linéaires : la récursivité

STRUCTURES DE DONNÉES LINÉAIRES:

LA RÉCURSIVITÉ

STRUCTURES DE DONNÉES LINÉAIRES:

LA RÉCURSIVITÉ

Page 3: Lec 07_Récursi

Structures de donnéesLeçon n. 1 – Introduction et vue d’ensemble

Prof. A. EL FAKERENSIAS - UNIVERSITE MOHAMMED V SOUISSI

Leçon n° 7 – Structures de données linéaires : la récursivité

Plan de la leçonPlan de la leçon

Concept de la récursivité Concept de la récursivité

Récursivité : exemples Récursivité : exemples

Simulation de la récursivité Simulation de la récursivité

Page 4: Lec 07_Récursi

Structures de donnéesLeçon n. 1 – Introduction et vue d’ensemble

Prof. A. EL FAKERENSIAS - UNIVERSITE MOHAMMED V SOUISSI

Leçon n° 7 – Structures de données linéaires : la récursivité

Conceptde la récursivité

Conceptde la récursivité

Page 5: Lec 07_Récursi

Structures de donnéesLeçon n. 1 – Introduction et vue d’ensemble

Prof. A. EL FAKERENSIAS - UNIVERSITE MOHAMMED V SOUISSI

Leçon n° 7 – Structures de données linéaires : la récursivité

Concept de la récursivitéConcept de la récursivité

Une fonction récursive estune fonction qui s’appelleelle-même

Une fonction récursive estune fonction qui s’appelleelle-même

Le miroir vu dans le miroir Le miroir vu dans le miroir

Page 6: Lec 07_Récursi

Structures de donnéesLeçon n. 1 – Introduction et vue d’ensemble

Prof. A. EL FAKERENSIAS - UNIVERSITE MOHAMMED V SOUISSI

Leçon n° 7 – Structures de données linéaires : la récursivité

Concept de la récursivitéConcept de la récursivité

Intérêt Intérêt Permet d’écrire des programmes

beaucoup plus lisibles Permet d’écrire des programmes

beaucoup plus lisibles Proche du formalisme de

récurrence en mathématique Proche du formalisme de

récurrence en mathématique Indispensable dans le traitement

des types récursifs Indispensable dans le traitement

des types récursifs Indispensable pour le principe

de diviser pour résoudre Indispensable pour le principe

de diviser pour résoudre

Page 7: Lec 07_Récursi

Structures de donnéesLeçon n. 1 – Introduction et vue d’ensemble

Prof. A. EL FAKERENSIAS - UNIVERSITE MOHAMMED V SOUISSI

Leçon n° 7 – Structures de données linéaires : la récursivité

Concept de la récursivitéConcept de la récursivité

ExempleExemple

0! = 1! = 1n! = n*(n-1)! 0! = 1! = 1n! = n*(n-1)!

Calcul de la factorielleCalcul de la factorielle

Page 8: Lec 07_Récursi

Structures de donnéesLeçon n. 1 – Introduction et vue d’ensemble

Prof. A. EL FAKERENSIAS - UNIVERSITE MOHAMMED V SOUISSI

Leçon n° 7 – Structures de données linéaires : la récursivité

Concept de la récursivitéConcept de la récursivité

Version itérative Version itérative

Par accumulation du produitPar accumulation du produitint factorielle (int n){

int p=1;for (int i=n ; i>1 ; i--)

p *= i;return p;

}

Page 9: Lec 07_Récursi

Structures de donnéesLeçon n. 1 – Introduction et vue d’ensemble

Prof. A. EL FAKERENSIAS - UNIVERSITE MOHAMMED V SOUISSI

Leçon n° 7 – Structures de données linéaires : la récursivité

Tout près de la définition mathématique

Tout près de la définition mathématique

Concept de la récursivitéConcept de la récursivité

Version récursive Version récursive

RécursifRécursifint f (int n){ if( n==0) return 1; //cas de base else return n *f(n-1);}

Page 10: Lec 07_Récursi

Structures de donnéesLeçon n. 1 – Introduction et vue d’ensemble

Prof. A. EL FAKERENSIAS - UNIVERSITE MOHAMMED V SOUISSI

Leçon n° 7 – Structures de données linéaires : la récursivité

D’abord le cas de base D’abord le cas de base

Concept de la récursivitéConcept de la récursivité

Version récursive Version récursive

RécursifRécursifint f (int n){ if( n==0) return 1; //cas de base else return n *f(n-1);}

Ensuite la relation de récurrence Ensuite la relation de récurrence

Page 11: Lec 07_Récursi

Structures de donnéesLeçon n. 1 – Introduction et vue d’ensemble

Prof. A. EL FAKERENSIAS - UNIVERSITE MOHAMMED V SOUISSI

Leçon n° 7 – Structures de données linéaires : la récursivité

Concept de la récursivitéConcept de la récursivité

La récursivité ne marche que si on atteint le cas de base

La récursivité ne marche que si on atteint le cas de base

RécursifRécursifint f (int n){ if( n==0) return 1; //cas de base else return f(n+1)/(n+1);}

Page 12: Lec 07_Récursi

Structures de donnéesLeçon n. 1 – Introduction et vue d’ensemble

Prof. A. EL FAKERENSIAS - UNIVERSITE MOHAMMED V SOUISSI

Leçon n° 7 – Structures de données linéaires : la récursivité

Comment fonctionneun programme récursif ?Comment fonctionneun programme récursif ?

On demande à l’ordinateur d’exécuter f(3)

On demande à l’ordinateur d’exécuter f(3)

Concept de la récursivitéConcept de la récursivité

Page 13: Lec 07_Récursi

Structures de donnéesLeçon n. 1 – Introduction et vue d’ensemble

Prof. A. EL FAKERENSIAS - UNIVERSITE MOHAMMED V SOUISSI

Leçon n° 7 – Structures de données linéaires : la récursivité

Concept de la récursivitéConcept de la récursivité

On stocke dans une pile le fait qu’on veut cette valeur

mais qu’on ne pourrala calculer qu’après avoir obtenu la valeur de f(2)

On stocke dans une pile le fait qu’on veut cette valeur

mais qu’on ne pourrala calculer qu’après avoir obtenu la valeur de f(2)

Comment fonctionneun programme récursif ?Comment fonctionneun programme récursif ?

Page 14: Lec 07_Récursi

Structures de donnéesLeçon n. 1 – Introduction et vue d’ensemble

Prof. A. EL FAKERENSIAS - UNIVERSITE MOHAMMED V SOUISSI

Leçon n° 7 – Structures de données linéaires : la récursivité

Comment fonctionneun programme récursifComment fonctionneun programme récursif

Concept de la récursivitéConcept de la récursivité

On empile les appels jusqu’à demander la valeur de f(0)

On empile les appels jusqu’à demander la valeur de f(0)

Page 15: Lec 07_Récursi

Structures de donnéesLeçon n. 1 – Introduction et vue d’ensemble

Prof. A. EL FAKERENSIAS - UNIVERSITE MOHAMMED V SOUISSI

Leçon n° 7 – Structures de données linéaires : la récursivité

Concept de la récursivitéConcept de la récursivité

Comment fonctionneun programme récursifComment fonctionneun programme récursif

On empile les appels jusqu’à demander la valeur de f(0)

On empile les appels jusqu’à demander la valeur de f(0)

f(3)nn ff

33 ???? f(3)nn ff

33 ??

22 ??f(2)

f(3)nn ff

33 ??

22 ??

11 ??

f(2)

f(1)

Page 16: Lec 07_Récursi

Structures de donnéesLeçon n. 1 – Introduction et vue d’ensemble

Prof. A. EL FAKERENSIAS - UNIVERSITE MOHAMMED V SOUISSI

Leçon n° 7 – Structures de données linéaires : la récursivité

Comment fonctionneun programme récursifComment fonctionneun programme récursif

Concept de la récursivitéConcept de la récursivité

On dépile les appels pourpouvoir calculer la valeur de f(3)

On dépile les appels pourpouvoir calculer la valeur de f(3)

Page 17: Lec 07_Récursi

Structures de donnéesLeçon n. 1 – Introduction et vue d’ensemble

Prof. A. EL FAKERENSIAS - UNIVERSITE MOHAMMED V SOUISSI

Leçon n° 7 – Structures de données linéaires : la récursivité

Concept de la récursivitéConcept de la récursivité

33 ??22 22

Comment fonctionneun programme récursifComment fonctionneun programme récursif

33 6633 ??22 ??11 11

33 ??22 ??11 ??00 11

On dépile les appels pourpouvoir calculer la valeur de f(3)

On dépile les appels pourpouvoir calculer la valeur de f(3)

Page 18: Lec 07_Récursi

Structures de donnéesLeçon n. 1 – Introduction et vue d’ensemble

Prof. A. EL FAKERENSIAS - UNIVERSITE MOHAMMED V SOUISSI

Leçon n° 7 – Structures de données linéaires : la récursivité

Cas simple de récursivité terminale

Cas simple de récursivité terminale

Concept de la récursivitéConcept de la récursivité

A propos de la factorielle A propos de la factorielle

Boucle déguisée Boucle déguisée

Dans d’autres cas la récursivité à un plus grand apport

Dans d’autres cas la récursivité à un plus grand apport

Page 19: Lec 07_Récursi

Structures de donnéesLeçon n. 1 – Introduction et vue d’ensemble

Prof. A. EL FAKERENSIAS - UNIVERSITE MOHAMMED V SOUISSI

Leçon n° 7 – Structures de données linéaires : la récursivité

Tour de Hanoï: la légendeTour de Hanoï: la légende

Jeu inspiré par une fausselégende créée

par le mathématicienEdouard Lucas

Jeu inspiré par une fausselégende créée

par le mathématicienEdouard Lucas

Récursivité : exemplesRécursivité : exemples

Page 20: Lec 07_Récursi

Structures de donnéesLeçon n. 1 – Introduction et vue d’ensemble

Prof. A. EL FAKERENSIAS - UNIVERSITE MOHAMMED V SOUISSI

Leçon n° 7 – Structures de données linéaires : la récursivité

AA BB CC

Les moines d’un temple doivent transférer une tour de 64 disques

Les moines d’un temple doivent transférer une tour de 64 disques

Il disposent de trois piquets au total Il disposent de trois piquets au total

Tour de Hanoï: la légendeTour de Hanoï: la légende

Récursivité : exemplesRécursivité : exemples

Page 21: Lec 07_Récursi

Structures de donnéesLeçon n. 1 – Introduction et vue d’ensemble

Prof. A. EL FAKERENSIAS - UNIVERSITE MOHAMMED V SOUISSI

Leçon n° 7 – Structures de données linéaires : la récursivité

AA BB CC

Ils doivent respecter deux règlesIls doivent respecter deux règles

Tour de Hanoï: la légendeTour de Hanoï: la légende

Récursivité : exemplesRécursivité : exemples

Page 22: Lec 07_Récursi

Structures de donnéesLeçon n. 1 – Introduction et vue d’ensemble

Prof. A. EL FAKERENSIAS - UNIVERSITE MOHAMMED V SOUISSI

Leçon n° 7 – Structures de données linéaires : la récursivité

Ils doivent respecter deux règlesIls doivent respecter deux règles

Tour de Hanoï: la légendeTour de Hanoï: la légende

Ne déplacer qu'un seul disque à la fois

Ne déplacer qu'un seul disque à la fois

11

AA BB CC

Récursivité : exemplesRécursivité : exemples

Page 23: Lec 07_Récursi

Structures de donnéesLeçon n. 1 – Introduction et vue d’ensemble

Prof. A. EL FAKERENSIAS - UNIVERSITE MOHAMMED V SOUISSI

Leçon n° 7 – Structures de données linéaires : la récursivité

Ils doivent respecter deux règlesIls doivent respecter deux règles

Tour de Hanoï: la légendeTour de Hanoï: la légende

Un disque doit être empilé sur un autre de dimension supérieureUn disque doit être empilé sur un autre de dimension supérieure

22

AA BB CC

Récursivité : exemplesRécursivité : exemples

Page 24: Lec 07_Récursi

Structures de donnéesLeçon n. 1 – Introduction et vue d’ensemble

Prof. A. EL FAKERENSIAS - UNIVERSITE MOHAMMED V SOUISSI

Leçon n° 7 – Structures de données linéaires : la récursivité

Tour de HanoïTour de Hanoï

Selon la légende, Selon la légende,

ils auront terminés dans … 10 milliards d'années !!

ils auront terminés dans … 10 milliards d'années !!

Récursivité : exemplesRécursivité : exemples

Page 25: Lec 07_Récursi

Structures de donnéesLeçon n. 1 – Introduction et vue d’ensemble

Prof. A. EL FAKERENSIAS - UNIVERSITE MOHAMMED V SOUISSI

Leçon n° 7 – Structures de données linéaires : la récursivité

Avec 3 disquesAvec 3 disques

AA BB CC

Récursivité : exemplesRécursivité : exemples

Page 26: Lec 07_Récursi

Structures de donnéesLeçon n. 1 – Introduction et vue d’ensemble

Prof. A. EL FAKERENSIAS - UNIVERSITE MOHAMMED V SOUISSI

Leçon n° 7 – Structures de données linéaires : la récursivité

AA BB CCAA BB CC

Avec 3 disquesAvec 3 disques

Récursivité : exemplesRécursivité : exemples

Page 27: Lec 07_Récursi

Structures de donnéesLeçon n. 1 – Introduction et vue d’ensemble

Prof. A. EL FAKERENSIAS - UNIVERSITE MOHAMMED V SOUISSI

Leçon n° 7 – Structures de données linéaires : la récursivité

AA BB CCAA BB CC

Avec 3 disquesAvec 3 disques

Récursivité : exemplesRécursivité : exemples

Page 28: Lec 07_Récursi

Structures de donnéesLeçon n. 1 – Introduction et vue d’ensemble

Prof. A. EL FAKERENSIAS - UNIVERSITE MOHAMMED V SOUISSI

Leçon n° 7 – Structures de données linéaires : la récursivité

AA BB CCAA BB CC

Avec 3 disquesAvec 3 disques

Récursivité : exemplesRécursivité : exemples

Page 29: Lec 07_Récursi

Structures de donnéesLeçon n. 1 – Introduction et vue d’ensemble

Prof. A. EL FAKERENSIAS - UNIVERSITE MOHAMMED V SOUISSI

Leçon n° 7 – Structures de données linéaires : la récursivité

AA BB CCAA BB CC

Avec 3 disquesAvec 3 disques

Récursivité : exemplesRécursivité : exemples

Page 30: Lec 07_Récursi

Structures de donnéesLeçon n. 1 – Introduction et vue d’ensemble

Prof. A. EL FAKERENSIAS - UNIVERSITE MOHAMMED V SOUISSI

Leçon n° 7 – Structures de données linéaires : la récursivité

AA BB CCAA BB CC

Avec 3 disquesAvec 3 disques

Récursivité : exemplesRécursivité : exemples

Page 31: Lec 07_Récursi

Structures de donnéesLeçon n. 1 – Introduction et vue d’ensemble

Prof. A. EL FAKERENSIAS - UNIVERSITE MOHAMMED V SOUISSI

Leçon n° 7 – Structures de données linéaires : la récursivité

AA BB CC

Avec 3 disquesAvec 3 disques

Récursivité : exemplesRécursivité : exemples

Page 32: Lec 07_Récursi

Structures de donnéesLeçon n. 1 – Introduction et vue d’ensemble

Prof. A. EL FAKERENSIAS - UNIVERSITE MOHAMMED V SOUISSI

Leçon n° 7 – Structures de données linéaires : la récursivité

Avec 3 disquesAvec 3 disques

AA BB CC

Récursivité : exemplesRécursivité : exemples

Page 33: Lec 07_Récursi

Structures de donnéesLeçon n. 1 – Introduction et vue d’ensemble

Prof. A. EL FAKERENSIAS - UNIVERSITE MOHAMMED V SOUISSI

Leçon n° 7 – Structures de données linéaires : la récursivité

Exercice: avec 4 disquesExercice: avec 4 disques

AA BB CC

Récursivité : exemplesRécursivité : exemples

Page 34: Lec 07_Récursi

Structures de donnéesLeçon n. 1 – Introduction et vue d’ensemble

Prof. A. EL FAKERENSIAS - UNIVERSITE MOHAMMED V SOUISSI

Leçon n° 7 – Structures de données linéaires : la récursivité

Exercice: avec 4 disquesExercice: avec 4 disques

AA BB CC

Récursivité : exemplesRécursivité : exemples

Page 35: Lec 07_Récursi

Structures de donnéesLeçon n. 1 – Introduction et vue d’ensemble

Prof. A. EL FAKERENSIAS - UNIVERSITE MOHAMMED V SOUISSI

Leçon n° 7 – Structures de données linéaires : la récursivité

Exercice: avec 4 disquesExercice: avec 4 disques

AA BB CC

Récursivité : exemplesRécursivité : exemples

Page 36: Lec 07_Récursi

Structures de donnéesLeçon n. 1 – Introduction et vue d’ensemble

Prof. A. EL FAKERENSIAS - UNIVERSITE MOHAMMED V SOUISSI

Leçon n° 7 – Structures de données linéaires : la récursivité

Exercice: avec 4 disquesExercice: avec 4 disques

AA CCBB

Récursivité : exemplesRécursivité : exemples

Page 37: Lec 07_Récursi

Structures de donnéesLeçon n. 1 – Introduction et vue d’ensemble

Prof. A. EL FAKERENSIAS - UNIVERSITE MOHAMMED V SOUISSI

Leçon n° 7 – Structures de données linéaires : la récursivité

Avec n disquesAvec n disques

AA CCBB22

11 33

Récursivité : exemplesRécursivité : exemples

Page 38: Lec 07_Récursi

Structures de donnéesLeçon n. 1 – Introduction et vue d’ensemble

Prof. A. EL FAKERENSIAS - UNIVERSITE MOHAMMED V SOUISSI

Leçon n° 7 – Structures de données linéaires : la récursivité

Récursivité : exemplesRécursivité : exemples

void tour(int n, A,B,C ) {if (n==1) {

printf("%d=>%d\n",A,C); return;}tour(n-1, A,C,B ) ;printf("%d=>%d\n",A,C);tour(n-1, B,A,C ) ;return;

}

void tour(int n, A,B,C ) {if (n==1) {

printf("%d=>%d\n",A,C); return;}tour(n-1, A,C,B ) ;printf("%d=>%d\n",A,C);tour(n-1, B,A,C ) ;return;

}

Page 39: Lec 07_Récursi

Structures de donnéesLeçon n. 1 – Introduction et vue d’ensemble

Prof. A. EL FAKERENSIAS - UNIVERSITE MOHAMMED V SOUISSI

Leçon n° 7 – Structures de données linéaires : la récursivité

Simulationde la récursive

Simulationde la récursive

Page 40: Lec 07_Récursi

Structures de donnéesLeçon n. 1 – Introduction et vue d’ensemble

Prof. A. EL FAKERENSIAS - UNIVERSITE MOHAMMED V SOUISSI

Leçon n° 7 – Structures de données linéaires : la récursivité

PourquoiPourquoi

Pour comprendre le principe Pour comprendre le principe

Simulation de la récursivitéSimulation de la récursivité

Pour les langages sansrécursivité

Pour les langages sansrécursivité

Page 41: Lec 07_Récursi

Structures de donnéesLeçon n. 1 – Introduction et vue d’ensemble

Prof. A. EL FAKERENSIAS - UNIVERSITE MOHAMMED V SOUISSI

Leçon n° 7 – Structures de données linéaires : la récursivité

void f(A ) {1: if (C) {

instructions;return; }

2: f(A');3: instructions;4: return;

}

void f(A ) {1: if (C) {

instructions;return; }

2: f(A');3: instructions;4: return;

}

Simulation de la récursivitéSimulation de la récursivité

Page 42: Lec 07_Récursi

Structures de donnéesLeçon n. 1 – Introduction et vue d’ensemble

Prof. A. EL FAKERENSIAS - UNIVERSITE MOHAMMED V SOUISSI

Leçon n° 7 – Structures de données linéaires : la récursivité

Les valeurs actuelles des paramètreset des variables locales seront

empilées pour traitements ultérieurs

Les valeurs actuelles des paramètreset des variables locales seront

empilées pour traitements ultérieurs

A chaque appel à f A chaque appel à f

f(A');f(A');

Simulation de la récursivitéSimulation de la récursivité

Page 43: Lec 07_Récursi

Structures de donnéesLeçon n. 1 – Introduction et vue d’ensemble

Prof. A. EL FAKERENSIAS - UNIVERSITE MOHAMMED V SOUISSI

Leçon n° 7 – Structures de données linéaires : la récursivité

Les valeurs relatives à l'exécution actuelle de f seront restaurées

après dépilement

Les valeurs relatives à l'exécution actuelle de f seront restaurées

après dépilement

A chaque retour récursif sur f A chaque retour récursif sur f

return;return;

Simulation de la récursivitéSimulation de la récursivité

Page 44: Lec 07_Récursi

Structures de donnéesLeçon n. 1 – Introduction et vue d’ensemble

Prof. A. EL FAKERENSIAS - UNIVERSITE MOHAMMED V SOUISSI

Leçon n° 7 – Structures de données linéaires : la récursivité

Adresse de retour Adresse de retour

Simulation de la récursivitéSimulation de la récursivité

Une fois l’appel terminé

Une fois l’appel terminé Deux approches Deux approches

void f(A ) {…

@ : f(A');

@+1 : instructions;

void f(A ) {…

@ : f(A');

@+1 : instructions;

11

22

Page 45: Lec 07_Récursi

Structures de donnéesLeçon n. 1 – Introduction et vue d’ensemble

Prof. A. EL FAKERENSIAS - UNIVERSITE MOHAMMED V SOUISSI

Leçon n° 7 – Structures de données linéaires : la récursivité

Simulation de la récursivitéSimulation de la récursivité

Empiler la nouvelle adresse de retour Empiler la nouvelle adresse de retour

f(A');@+1 : instructions;

f(A');@+1 : instructions;

Pour revenir au niveau de l’exécutionde f

Pour revenir au niveau de l’exécutionde f

Choisie car elle simplifie le processus de traduction

Choisie car elle simplifie le processus de traduction

Adresse de retour Adresse de retour

Page 46: Lec 07_Récursi

Structures de donnéesLeçon n. 1 – Introduction et vue d’ensemble

Prof. A. EL FAKERENSIAS - UNIVERSITE MOHAMMED V SOUISSI

Leçon n° 7 – Structures de données linéaires : la récursivité

Version itérativede la tour de HanoiVersion itérative

de la tour de Hanoi

Simulation de la récursivitéSimulation de la récursivité

Page 47: Lec 07_Récursi

Structures de donnéesLeçon n. 1 – Introduction et vue d’ensemble

Prof. A. EL FAKERENSIAS - UNIVERSITE MOHAMMED V SOUISSI

Leçon n° 7 – Structures de données linéaires : la récursivité

Simulation de la récursivitéSimulation de la récursivité

void tour(int n, A,B,C ) {1: if (n==1) {

printf("%d=>%d\n",A,C); return; }

2: tour(n-1, A,C,B ) ;3: printf("%d=>%d\n",A,C);4: tour(n-1, B,A,C ) ;5: return;

}

void tour(int n, A,B,C ) {1: if (n==1) {

printf("%d=>%d\n",A,C); return; }

2: tour(n-1, A,C,B ) ;3: printf("%d=>%d\n",A,C);4: tour(n-1, B,A,C ) ;5: return;

}

Page 48: Lec 07_Récursi

Structures de donnéesLeçon n. 1 – Introduction et vue d’ensemble

Prof. A. EL FAKERENSIAS - UNIVERSITE MOHAMMED V SOUISSI

Leçon n° 7 – Structures de données linéaires : la récursivité

Déclaration du contexte Déclaration du contexte

Simulation de la récursivitéSimulation de la récursivité

Type abstrait Type abstrait

typedef struct _context {int n,A,B,C,add;

} context;void push(int

n,A,B,C,add);context pop(void);int empty(void);void raz(void);

typedef struct _context {int n,A,B,C,add;

} context;void push(int

n,A,B,C,add);context pop(void);int empty(void);void raz(void);

Page 49: Lec 07_Récursi

Structures de donnéesLeçon n. 1 – Introduction et vue d’ensemble

Prof. A. EL FAKERENSIAS - UNIVERSITE MOHAMMED V SOUISSI

Leçon n° 7 – Structures de données linéaires : la récursivité

void tour(int n,A,B,C){ context cnt; raz();

1 : if(n == 1) { printf("%d=>%d\n",A,C); goto 5 : }

2 : // Appel récursif tour(n-1,A,C,B);/* Empiler les valeurs actuelles sur la

pile. retour à 3 une fois l’appel achevé */ push(n,A,B,C,3);

// Restaurer les paramètres n--; swap(B,C); // échange B et C

goto 1;3 : printf("%d=>%d\n",A,C);

void tour(int n,A,B,C){ context cnt; raz();

1 : if(n == 1) { printf("%d=>%d\n",A,C); goto 5 : }

2 : // Appel récursif tour(n-1,A,C,B);/* Empiler les valeurs actuelles sur la

pile. retour à 3 une fois l’appel achevé */ push(n,A,B,C,3);

// Restaurer les paramètres n--; swap(B,C); // échange B et C

goto 1;3 : printf("%d=>%d\n",A,C);

Page 50: Lec 07_Récursi

Structures de donnéesLeçon n. 1 – Introduction et vue d’ensemble

Prof. A. EL FAKERENSIAS - UNIVERSITE MOHAMMED V SOUISSI

Leçon n° 7 – Structures de données linéaires : la récursivité

3 : printf("%d=>%d\n",A,C);4 : // tour(n-1,B,A,C);

retour à 5 une fois l’appel achevépush(n,A,B,C,5); n--; swap(A,B); goto 1;

5 : // Traduire le returnif(empty()) return;// Restaurer les valeurs de sommet sur

les piles. cnt = pop();n=cnt.n; A=cnt.A; B=cnt.B;

C=cnt.C; goto cnt.add;

}

3 : printf("%d=>%d\n",A,C);4 : // tour(n-1,B,A,C);

retour à 5 une fois l’appel achevépush(n,A,B,C,5); n--; swap(A,B); goto 1;

5 : // Traduire le returnif(empty()) return;// Restaurer les valeurs de sommet sur

les piles. cnt = pop();n=cnt.n; A=cnt.A; B=cnt.B;

C=cnt.C; goto cnt.add;

}

Page 51: Lec 07_Récursi

Structures de donnéesLeçon n. 1 – Introduction et vue d’ensemble

Prof. A. EL FAKERENSIAS - UNIVERSITE MOHAMMED V SOUISSI

Leçon n° 7 – Structures de données linéaires : la récursivité

Récursivité : exemplesRécursivité : exemples

Représentation binaireReprésentation binaire

n = b0+b12+b222+…+bp2p, bi Є {0,1}n = b0+b12+b222+…+bp2p, bi Є {0,1}

Afficher à l’écran les chiffres binaires?Pour 13 on doit avoir 1101

Afficher à l’écran les chiffres binaires?Pour 13 on doit avoir 1101

Page 52: Lec 07_Récursi

Structures de donnéesLeçon n. 1 – Introduction et vue d’ensemble

Prof. A. EL FAKERENSIAS - UNIVERSITE MOHAMMED V SOUISSI

Leçon n° 7 – Structures de données linéaires : la récursivité

(13)2=(6)2

=(3)2

=(1)2

=

(13)2=(6)2

=(3)2

=(1)2

=

101

1011101

101

1011101

Récursivité : exemplesRécursivité : exemples

Représentation binaireReprésentation binaire

Page 53: Lec 07_Récursi

Structures de donnéesLeçon n. 1 – Introduction et vue d’ensemble

Prof. A. EL FAKERENSIAS - UNIVERSITE MOHAMMED V SOUISSI

Leçon n° 7 – Structures de données linéaires : la récursivité

Faire des divisions euclidiennes successives par 2

Faire des divisions euclidiennes successives par 2

C’est simpleC’est simplevoid binaire (int n){ while( n!=0){ printf("%d ",n%2); n= n/2; } return ;}

Récursivité : exemplesRécursivité : exemples

Représentation binaireReprésentation binaire

Page 54: Lec 07_Récursi

Structures de donnéesLeçon n. 1 – Introduction et vue d’ensemble

Prof. A. EL FAKERENSIAS - UNIVERSITE MOHAMMED V SOUISSI

Leçon n° 7 – Structures de données linéaires : la récursivité

Mais …Mais …AfficheAffiche 10111011 au lieu deau lieu de 11011101void binaire (int n){ while( n!=0){ printf("%d ",n%2); n= n/2; } return ;}

Récursivité : exemplesRécursivité : exemples

Représentation binaireReprésentation binaire

Page 55: Lec 07_Récursi

Structures de donnéesLeçon n. 1 – Introduction et vue d’ensemble

Prof. A. EL FAKERENSIAS - UNIVERSITE MOHAMMED V SOUISSI

Leçon n° 7 – Structures de données linéaires : la récursivité

Programme récursif Programme récursif Arrêt: n , x/2n =0 Arrêt: n , x/2n =0

Affiche toujours Affiche toujours 10111011 au lieu de au lieu de 11011101void binRec (int n){ if( n > 0){ printf("%d ",n%2); binRec(n/2); } return ;}

Récursivité : exemplesRécursivité : exemples

Représentation binaireReprésentation binaire

Page 56: Lec 07_Récursi

Structures de donnéesLeçon n. 1 – Introduction et vue d’ensemble

Prof. A. EL FAKERENSIAS - UNIVERSITE MOHAMMED V SOUISSI

Leçon n° 7 – Structures de données linéaires : la récursivité

3311

131366

(13)(13)(6)(6)

11001111

void binRec (int n){ if( n > 0){ printf("%d ",n%2); binRec(n/2); } return ;}

Pourquoi ? Pourquoi ?

Inverser les deux instructions

Récursivité : exemplesRécursivité : exemples

Page 57: Lec 07_Récursi

Structures de donnéesLeçon n. 1 – Introduction et vue d’ensemble

Prof. A. EL FAKERENSIAS - UNIVERSITE MOHAMMED V SOUISSI

Leçon n° 7 – Structures de données linéaires : la récursivité

STRUCTURES DE

DONNÉES

STRUCTURES DE

DONNÉES