Lec 07_Récursi

Download Lec 07_Récursi

Post on 18-Apr-2015

9 views

Category:

Documents

3 download

Embed Size (px)

TRANSCRIPT

<p>n 7 Structures de vue densemble Leon n. 1 Introduction etdonnes linaires : la rcursivit</p> <p>Structures de donnes</p> <p>STRUCTURES DE DONNESProf. A. EL FAKERENSIAS - UNIVERSITE MOHAMMED V SOUISSI</p> <p>n 7 Structures de vue densemble Leon n. 1 Introduction etdonnes linaires : la rcursivit</p> <p>Structures de donnes</p> <p>STRUCTURES DE DONNES LINAIRES:LA RCURSIVIT</p> <p>Prof. A. EL FAKERENSIAS - UNIVERSITE MOHAMMED V SOUISSI</p> <p>n 7 Structures de vue densemble Leon n. 1 Introduction etdonnes linaires : la rcursivit</p> <p>Structures de donnes</p> <p>Plan de la leon Concept de la rcursivit Rcursivit : exemples Simulation de la rcursivitProf. A. EL FAKERENSIAS - UNIVERSITE MOHAMMED V SOUISSI</p> <p>n 7 Structures de vue densemble Leon n. 1 Introduction etdonnes linaires : la rcursivit</p> <p>Structures de donnes</p> <p>Concept de la rcursivit</p> <p>Prof. A. EL FAKERENSIAS - UNIVERSITE MOHAMMED V SOUISSI</p> <p>n 7 Structures de vue densemble Leon n. 1 Introduction etdonnes linaires : la rcursivit</p> <p>Structures de donnes</p> <p>Concept de la rcursivit Une fonction rcursive est une fonction qui sappelle elle-mme Le miroir vu dans le miroir</p> <p>Prof. A. EL FAKERENSIAS - UNIVERSITE MOHAMMED V SOUISSI</p> <p>n 7 Structures de vue densemble Leon n. 1 Introduction etdonnes linaires : la rcursivit</p> <p>Structures de donnes</p> <p>Concept de la rcursivit Intrt Permet dcrire des programmes beaucoup plus lisibles Proche du formalisme de rcurrence en mathmatique Indispensable dans le traitement des types rcursifs Indispensable pour le principe de diviser pour rsoudreProf. A. EL FAKERENSIAS - UNIVERSITE MOHAMMED V SOUISSI</p> <p>n 7 Structures de vue densemble Leon n. 1 Introduction etdonnes linaires : la rcursivit</p> <p>Structures de donnes</p> <p>Concept de la rcursivitExempleCalcul de la factorielle</p> <p>0! = 1! = 1 n! = n*(n-1)!</p> <p>Prof. A. EL FAKERENSIAS - UNIVERSITE MOHAMMED V SOUISSI</p> <p>n 7 Structures de vue densemble Leon n. 1 Introduction etdonnes linaires : la rcursivit</p> <p>Structures de donnes</p> <p>Concept de la rcursivit Version itrative Par accumulation du produit int factorielle (int n) { int p=1; for (int i=n ; i&gt;1 ; i--) p *= i; return p; }Prof. A. EL FAKERENSIAS - UNIVERSITE MOHAMMED V SOUISSI</p> <p>n 7 Structures de vue densemble Leon n. 1 Introduction etdonnes linaires : la rcursivit</p> <p>Structures de donnes</p> <p>Concept de la rcursivit Version rcursive Tout prs de la dfinition mathmatique</p> <p>Rcursif int f (int n) { if( n==0) return 1; //cas de base else return n *f(n-1); }Prof. A. EL FAKERENSIAS - UNIVERSITE MOHAMMED V SOUISSI</p> <p>n 7 Structures de vue densemble Leon n. 1 Introduction etdonnes linaires : la rcursivit</p> <p>Structures de donnes</p> <p>Concept de la rcursivit Version rcursive Dabord le cas de base Ensuite la relation de rcurrence</p> <p>Rcursif int f (int n) { if( n==0) return 1; //cas de base else return n *f(n-1); }Prof. A. EL FAKERENSIAS - UNIVERSITE MOHAMMED V SOUISSI</p> <p>n 7 Structures de vue densemble Leon n. 1 Introduction etdonnes linaires : la rcursivit</p> <p>Structures de donnes</p> <p>Concept de la rcursivit La rcursivit ne marche que si on atteint le cas de base</p> <p>Rcursifint f (int n) { if( n==0) return 1; //cas de base else return f(n+1)/(n+1); }Prof. A. EL FAKERENSIAS - UNIVERSITE MOHAMMED V SOUISSI</p> <p>n 7 Structures de vue densemble Leon n. 1 Introduction etdonnes linaires : la rcursivit</p> <p>Structures de donnes</p> <p>Concept de la rcursivitComment fonctionne un programme rcursif ?</p> <p>On demande lordinateur dexcuter f(3)</p> <p>Prof. A. EL FAKERENSIAS - UNIVERSITE MOHAMMED V SOUISSI</p> <p>n 7 Structures de vue densemble Leon n. 1 Introduction etdonnes linaires : la rcursivit</p> <p>Structures de donnes</p> <p>Concept de la rcursivitComment fonctionne un programme rcursif ?On stocke dans une pile le fait quon veut cette valeur mais quon ne pourra la calculer quaprs avoir obtenu la valeur de f(2)Prof. A. EL FAKERENSIAS - UNIVERSITE MOHAMMED V SOUISSI</p> <p>n 7 Structures de vue densemble Leon n. 1 Introduction etdonnes linaires : la rcursivit</p> <p>Structures de donnes</p> <p>Concept de la rcursivitComment fonctionne un programme rcursifOn empile les appels jusqu demander la valeur de f(0)</p> <p>Prof. A. EL FAKERENSIAS - UNIVERSITE MOHAMMED V SOUISSI</p> <p>n 7 Structures de vue densemble Leon n. 1 Introduction etdonnes linaires : la rcursivit</p> <p>Structures de donnes</p> <p>Concept de la rcursivitComment fonctionne un programme rcursifOn empile les appels jusqu demander la valeur de f(0)f(1)f(2) f(3)3 ?? 2 3 ? ? 1 2 3 ? ? ?</p> <p>f(3)</p> <p>f(2) f(3)</p> <p>nProf. A. EL FAKER</p> <p>f</p> <p>n</p> <p>f</p> <p>n</p> <p>f</p> <p>ENSIAS - UNIVERSITE MOHAMMED V SOUISSI</p> <p>n 7 Structures de vue densemble Leon n. 1 Introduction etdonnes linaires : la rcursivit</p> <p>Structures de donnes</p> <p>Concept de la rcursivitComment fonctionne un programme rcursifOn dpile les appels pour pouvoir calculer la valeur de f(3)</p> <p>Prof. A. EL FAKERENSIAS - UNIVERSITE MOHAMMED V SOUISSI</p> <p>n 7 Structures de vue densemble Leon n. 1 Introduction etdonnes linaires : la rcursivit</p> <p>Structures de donnes</p> <p>Concept de la rcursivitComment fonctionne un programme rcursifOn dpile les appels pour pouvoir calculer la valeur de f(3)0 1 2 3 1 ? ? ?</p> <p>1 2 3</p> <p>1 ? ?</p> <p>2 3</p> <p>2 ?</p> <p>3</p> <p>6</p> <p>Prof. A. EL FAKERENSIAS - UNIVERSITE MOHAMMED V SOUISSI</p> <p>n 7 Structures de vue densemble Leon n. 1 Introduction etdonnes linaires : la rcursivit</p> <p>Structures de donnes</p> <p>Concept de la rcursivit A propos de la factorielle Cas simple de rcursivit terminale Boucle dguise</p> <p> Dans dautres cas la rcursivit un plus grand apportProf. A. EL FAKERENSIAS - UNIVERSITE MOHAMMED V SOUISSI</p> <p>n 7 Structures de vue densemble Leon n. 1 Introduction etdonnes linaires : la rcursivit</p> <p>Structures de donnes</p> <p>Rcursivit : exemplesTour de Hano: la lgendeJeu inspir par une fausse lgende cre par le mathmaticien Edouard Lucas</p> <p>Prof. A. EL FAKERENSIAS - UNIVERSITE MOHAMMED V SOUISSI</p> <p>n 7 Structures de vue densemble Leon n. 1 Introduction etdonnes linaires : la rcursivit</p> <p>Structures de donnes</p> <p>Rcursivit : exemplesTour de Hano: la lgende Les moines dun temple doivent transfrer une tour de 64 disques Il disposent de trois piquets au total</p> <p>AProf. A. EL FAKER</p> <p>B</p> <p>C</p> <p>ENSIAS - UNIVERSITE MOHAMMED V SOUISSI</p> <p>n 7 Structures de vue densemble Leon n. 1 Introduction etdonnes linaires : la rcursivit</p> <p>Structures de donnes</p> <p>Rcursivit : exemplesTour de Hano: la lgendeIls doivent respecter deux rgles</p> <p>AProf. A. EL FAKER</p> <p>B</p> <p>C</p> <p>ENSIAS - UNIVERSITE MOHAMMED V SOUISSI</p> <p>n 7 Structures de vue densemble Leon n. 1 Introduction etdonnes linaires : la rcursivit</p> <p>Structures de donnes</p> <p>Rcursivit : exemplesTour de Hano: la lgendeIls doivent respecter deux rgles1 Ne dplacer qu'un seul disque la fois</p> <p>AProf. A. EL FAKER</p> <p>B</p> <p>C</p> <p>ENSIAS - UNIVERSITE MOHAMMED V SOUISSI</p> <p>n 7 Structures de vue densemble Leon n. 1 Introduction etdonnes linaires : la rcursivit</p> <p>Structures de donnes</p> <p>Rcursivit : exemplesTour de Hano: la lgendeIls doivent respecter deux rgles2 Un disque doit tre empil sur un autre de dimension suprieure</p> <p>AProf. A. EL FAKER</p> <p>B</p> <p>C</p> <p>ENSIAS - UNIVERSITE MOHAMMED V SOUISSI</p> <p>n 7 Structures de vue densemble Leon n. 1 Introduction etdonnes linaires : la rcursivit</p> <p>Structures de donnes</p> <p>Rcursivit : exemplesTour de HanoSelon la lgende,ils auront termins dans 10 milliards d'annes !!</p> <p>Prof. A. EL FAKERENSIAS - UNIVERSITE MOHAMMED V SOUISSI</p> <p>n 7 Structures de vue densemble Leon n. 1 Introduction etdonnes linaires : la rcursivit</p> <p>Structures de donnes</p> <p>Rcursivit : exemplesAvec 3 disques</p> <p>AProf. A. EL FAKER</p> <p>B</p> <p>C</p> <p>ENSIAS - UNIVERSITE MOHAMMED V SOUISSI</p> <p>n 7 Structures de vue densemble Leon n. 1 Introduction etdonnes linaires : la rcursivit</p> <p>Structures de donnes</p> <p>Rcursivit : exemplesAvec 3 disques</p> <p>AProf. A. EL FAKER</p> <p>B</p> <p>C</p> <p>ENSIAS - UNIVERSITE MOHAMMED V SOUISSI</p> <p>n 7 Structures de vue densemble Leon n. 1 Introduction etdonnes linaires : la rcursivit</p> <p>Structures de donnes</p> <p>Rcursivit : exemplesAvec 3 disques</p> <p>AProf. A. EL FAKER</p> <p>B</p> <p>C</p> <p>ENSIAS - UNIVERSITE MOHAMMED V SOUISSI</p> <p>n 7 Structures de vue densemble Leon n. 1 Introduction etdonnes linaires : la rcursivit</p> <p>Structures de donnes</p> <p>Rcursivit : exemplesAvec 3 disques</p> <p>AProf. A. EL FAKER</p> <p>B</p> <p>C</p> <p>ENSIAS - UNIVERSITE MOHAMMED V SOUISSI</p> <p>n 7 Structures de vue densemble Leon n. 1 Introduction etdonnes linaires : la rcursivit</p> <p>Structures de donnes</p> <p>Rcursivit : exemplesAvec 3 disques</p> <p>AProf. A. EL FAKER</p> <p>B</p> <p>C</p> <p>ENSIAS - UNIVERSITE MOHAMMED V SOUISSI</p> <p>n 7 Structures de vue densemble Leon n. 1 Introduction etdonnes linaires : la rcursivit</p> <p>Structures de donnes</p> <p>Rcursivit : exemplesAvec 3 disques</p> <p>AProf. A. EL FAKER</p> <p>B</p> <p>C</p> <p>ENSIAS - UNIVERSITE MOHAMMED V SOUISSI</p> <p>n 7 Structures de vue densemble Leon n. 1 Introduction etdonnes linaires : la rcursivit</p> <p>Structures de donnes</p> <p>Rcursivit : exemplesAvec 3 disques</p> <p>AProf. A. EL FAKER</p> <p>B</p> <p>C</p> <p>ENSIAS - UNIVERSITE MOHAMMED V SOUISSI</p> <p>n 7 Structures de vue densemble Leon n. 1 Introduction etdonnes linaires : la rcursivit</p> <p>Structures de donnes</p> <p>Rcursivit : exemplesAvec 3 disques</p> <p>AProf. A. EL FAKER</p> <p>B</p> <p>C</p> <p>ENSIAS - UNIVERSITE MOHAMMED V SOUISSI</p> <p>n 7 Structures de vue densemble Leon n. 1 Introduction etdonnes linaires : la rcursivit</p> <p>Structures de donnes</p> <p>Rcursivit : exemplesExercice: avec 4 disques</p> <p>AProf. A. EL FAKER</p> <p>B</p> <p>C</p> <p>ENSIAS - UNIVERSITE MOHAMMED V SOUISSI</p> <p>n 7 Structures de vue densemble Leon n. 1 Introduction etdonnes linaires : la rcursivit</p> <p>Structures de donnes</p> <p>Rcursivit : exemplesExercice: avec 4 disques</p> <p>AProf. A. EL FAKER</p> <p>B</p> <p>C</p> <p>ENSIAS - UNIVERSITE MOHAMMED V SOUISSI</p> <p>n 7 Structures de vue densemble Leon n. 1 Introduction etdonnes linaires : la rcursivit</p> <p>Structures de donnes</p> <p>Rcursivit : exemplesExercice: avec 4 disques</p> <p>AProf. A. EL FAKER</p> <p>B</p> <p>C</p> <p>ENSIAS - UNIVERSITE MOHAMMED V SOUISSI</p> <p>n 7 Structures de vue densemble Leon n. 1 Introduction etdonnes linaires : la rcursivit</p> <p>Structures de donnes</p> <p>Rcursivit : exemplesExercice: avec 4 disques</p> <p>AProf. A. EL FAKER</p> <p>B</p> <p>C</p> <p>ENSIAS - UNIVERSITE MOHAMMED V SOUISSI</p> <p>n 7 Structures de vue densemble Leon n. 1 Introduction etdonnes linaires : la rcursivit</p> <p>Structures de donnes</p> <p>Rcursivit : exemplesAvec n disques</p> <p>1</p> <p>3</p> <p>A</p> <p>B</p> <p>C</p> <p>2Prof. A. EL FAKERENSIAS - UNIVERSITE MOHAMMED V SOUISSI</p> <p>n 7 Structures de vue densemble Leon n. 1 Introduction etdonnes linaires : la rcursivit</p> <p>Structures de donnes</p> <p>Rcursivit : exemplesvoid tour(int n, A,B,C ) { if (n==1) { printf("%d=&gt;%d\n",A,C); return; } tour(n-1, A,C,B ) ; printf("%d=&gt;%d\n",A,C); tour(n-1, B,A,C ) ; return; }Prof. A. EL FAKERENSIAS - UNIVERSITE MOHAMMED V SOUISSI</p> <p>n 7 Structures de vue densemble Leon n. 1 Introduction etdonnes linaires : la rcursivit</p> <p>Structures de donnes</p> <p>Simulation de la rcursive</p> <p>Prof. A. EL FAKERENSIAS - UNIVERSITE MOHAMMED V SOUISSI</p> <p>n 7 Structures de vue densemble Leon n. 1 Introduction etdonnes linaires : la rcursivit</p> <p>Structures de donnes</p> <p>Simulation de la rcursivitPourquoi Pour comprendre le principe Pour les langages sans rcursivit</p> <p>Prof. A. EL FAKERENSIAS - UNIVERSITE MOHAMMED V SOUISSI</p> <p>n 7 Structures de vue densemble Leon n. 1 Introduction etdonnes linaires : la rcursivit</p> <p>Structures de donnes</p> <p>Simulation de la rcursivit1: 2: 3: 4:void f(A ) { if (C) { instructions; } f(A'); instructions; return; }</p> <p>return;</p> <p>Prof. A. EL FAKERENSIAS - UNIVERSITE MOHAMMED V SOUISSI</p> <p>n 7 Structures de vue densemble Leon n. 1 Introduction etdonnes linaires : la rcursivit</p> <p>Structures de donnes</p> <p>Simulation de la rcursivit A chaque appel f f(A');Les valeurs actuelles des paramtres et des variables locales seront empiles pour traitements ultrieursProf. A. EL FAKERENSIAS - UNIVERSITE MOHAMMED V SOUISSI</p> <p>n 7 Structures de vue densemble Leon n. 1 Introduction etdonnes linaires : la rcursivit</p> <p>Structures de donnes</p> <p>Simulation de la rcursivit A chaque retour rcursif sur f return;Les valeurs relatives l'excution actuelle de f seront restaures aprs dpilementProf. A. EL FAKERENSIAS - UNIVERSITE MOHAMMED V SOUISSI</p> <p>n 7 Structures de vue densemble Leon n. 1 Introduction etdonnes linaires : la rcursivit</p> <p>Structures de donnes</p> <p>Simulation de la rcursivit Adresse de retour Une fois lappel termin Deux approches</p> <p>1 2</p> <p>void f(A ) { @ : @+1 :</p> <p>f(A');</p> <p>instructions;</p> <p>Prof. A. EL FAKERENSIAS - UNIVERSITE MOHAMMED V SOUISSI</p> <p>n 7 Structures de vue densemble Leon n. 1 Introduction etdonnes linaires : la rcursivit</p> <p>Structures de donnes</p> <p>Simulation de la rcursivit Adresse de retour@+1 :</p> <p>f(A'); instructions;</p> <p> Empiler la nouvelle adresse de retour Pour revenir au niveau de lexcution de f Choisie car elle simplifie le processus de traductionProf. A. EL FAKERENSIAS - UNIVERSITE MOHAMMED V SOUISSI</p> <p>n 7 Structures de vue densemble Leon n. 1 Introduction etdonnes linaires : la rcursivit</p> <p>Structures de donnes</p> <p>Simulation de la rcursivit</p> <p>Version itrative de la tour de Hanoi</p> <p>Prof. A. EL FAKERENSIAS - UNIVERSITE MOHAMMED V SOUISSI</p> <p>n 7 Structures de vue densemble Leon n. 1 Introduction etdonnes linaires : la rcursivit</p> <p>Structures de donnes</p> <p>Simulation de la rcursivitvoid tour(int n, A,B,C ) { 1: if (n==1) { printf("%d=&gt;%d\n",A,C); return; } 2: tour(n-1, A,C,B ) ; 3: printf("%d=&gt;%d\n",A,C); 4: tour(n-1, B,A,C ) ; 5: return; }Prof. A. EL FAKERENSIAS - UNIVERSITE MOHAMMED V SOUISSI</p> <p>n 7 Structures de vue densemble Leon n. 1 Introduction etdonnes linaires : la rcursivit</p> <p>Structures de donnes</p> <p>Simulation de la rcursivit Dclaration du contexte 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);Prof. A. EL FAKERENSIAS - UNIVERSITE MOHAMMED V SOUISSI</p> <p>n 7 Structures de vue densemble Leon n. 1 Introduction etdonnes linaires : la rcursivit</p> <p>Structures de donnes</p> <p>void tour(int n,A,B,C) { context cnt; raz(); 1 : if(n == 1) { printf("%d=&gt;%d\n",A,C); goto 5 : } 2 : // Appel rcursif tour(n-1,A,C,B); push(n,A,B,C,3);</p> <p>/* Empiler les valeurs actuelles sur la pile. retour 3 une fois lappel achev */ // Restaurer les paramtres n--; swap(B,C); // change B et C</p> <p>goto 1; 3 : printf("%d=&gt;%d\n",A,C);Prof. A. EL FAKERENSIAS - UNIVERSITE MOHAMMED V SOUISSI</p> <p>n 7 Structures de vue densemble Leon n. 1 Introduction etdonnes linaires : la rcursivit</p> <p>Structures de donnes</p> <p>3: printf("%d=&gt;%d\n",A,C); 4 : // tour(n-1,B,A,C); retour 5 une fois lappel achev push(n,A,B,C,5); n--; swap(A,B); goto 1; 5: // Traduire le return if(empty()) return;// Restaurer les valeurs de sommet sur les piles.</p> <p>}</p> <p>cnt = pop(); n=cnt.n; A=cnt.A; B=cnt.B; C=cnt.C; goto cnt.add;ENSIAS - UNIVERSITE MOHAMMED V SOUISSI</p> <p>Prof. A. EL FAKER</p> <p>n 7 Structures de vue densemble Leon n. 1 Introduction etdonnes linaires : la rcursivit</p> <p>Structures de donnes</p> <p>Rcursivit : exemplesReprsentation binairen = b0+b12+b222...</p>