Your SlideShare is downloading. ×
  • Like
Récursivité
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×

Now you can save presentations on your phone or tablet

Available for both IPhone and Android

Text the download link to your phone

Standard text messaging rates apply
Published

 

Published in Education
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
No Downloads

Views

Total Views
2,506
On SlideShare
0
From Embeds
0
Number of Embeds
7

Actions

Shares
Downloads
239
Comments
1
Likes
2

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. ALGO & PROG PROF : Mohamed SAYARICHAPIITRE 2 ::CHAP TRE 2 LA RECURSIVITE I. Introduction : 1. Activité 1 :1. Soit la définition de la fonction factoriel (module qui permet de calculer le factoriel d’unnombre n positif) Factoriel (5) = 5 * 4 * 3 * 2 * 1  Factoriel (n) = n * n-1 * n-2 * n-3 * …………… * 2 * 1 Factoriel (4) = 4 * 3 * 2 * 2 * 1  Factoriel (n-1) = n-1 * n-2 * n-3 * …………… * 2 * 1 Factoriel (n) = n * Factoriel (n-1)2. Et soit la définition de la fonction inverse (module qui permet d’inverser une chaîne decaractères .Inverse ("ALGO") = "O" + inverse ("ALG")  Inverse (ch) = denier caractère + Inverse du reste de la chaîneprivé du dernier caractèreInverse ("ALG") = "G" +inverse ("AL")  Inverse (ch) = denier caractère + Inverse du reste de la chaîneprivé du dernier caractère Inverse (ch) =ch[Long(ch)] + inverse (sous-chaîne (ch, 1, Long(ch)-1))Constatation 1 :Dans toutes les activités précédentes, nous avons utilisés, pour définir un module, le module luimême avec différents paramètres : Factoriel (n) = Factoriel (n-1) Inverse(ch) = ch[ L] + inverse (sous-chaîne (ch, 1, L-1))Lorsqu’un module (fonction ou procédure) s’appelle lui-même : ce procédé sera appelé récursivitéet le module est dit module récursif. II. Définition : - Un programme récursif est un module qui s’appelle lui-même. - La récursivité permet de résoudre certains problèmes dune manière très rapide, alors que si on devrait les résoudre de manière itérative, il nous faudrait beaucoup plus de temps et de structures de données intermédiaires. III. Principe et Présentation d’une solution récursive :1. Activité 2 :Exécuter manuellement :La fonction factoriel pour n = 4 La fonction inverse pour ch = "salut"F(4) = 4 * f (3) Inverse ("salut") = "t" + Inverse("salu") F(3) = 3 * f (2) Inverse("salu") = "u" + Inverse("sal") F(2) = 2 * f (1) Inverse("sal") = "l"+ Inverse("sa") F(1) = 1 * f (0) Inverse ("sa") = "a" + Inverse("s") F(0) = 0* f (-1) Inverse ("s") = "s" + Inverse("") Inverse ("") = "" + Inverse(?).Peut-on calculer le factoriel d’un nombre négatif ? On doit s’arrêter Page 1 sur 3
  • 2. ALGO & PROG PROF : Mohamed SAYARI Interprétations : Non bien sûr. Donc les appels récursifs doivent Lorsque la chaîne devient vide, on arrête les être arrêté lorsque n = 0. appels récursifs. Lorsque n =0, factoriel(0) = 1 Lorsque ch =  , inverse ( ) =   On appelle n = 0 le point d’arrêt de la fonction On appelle ch =   point d’arrêt de la fonction factoriel inverse 2 . C o n s ta ta tio n 2 : Dans une définition récursive, on doit s’arrêter après autant d’appels récursifs. Une solution récursive se traduit alors par une structure conditionnelle : Si point(s) d’arrêt(s) alors Valeur prise par la fonction si atteinte du point d’arrêt Sinon appel(s) récursif(s) Fin si Remarque : Une solution récursive peut avoir 1 ou plusieurs points d’arrêts et encore 1 ou plusieurs appels récursifs. Fonction factoriel (n : entier) : entier long function factoriel(n: integer): longint; Résultat =factoriel begin Exemple 1 : Factoriel= [ ] Si n = 0 alors if n = 0 then Calcul Point d’arrêt Factoriel  1 factoriel := 1factoriel d’un Sinon else nombre n Factoriel  n * factoriel (n-1) factoriel := n * factoriel(n - 1); Fin si end; Appel récursif Fonction inverse (ch : chaîne) : chaîne function inverse(ch: string): string; Résultat = inverse begin Exemple 2 : Inverse=[ ] si ch = "" alors if ch = ‘’ then Inversion inverse  "" inverse := ‘’d’une chaîne sinon else ch inverse  ch [long(ch)] + inverse (sous-chaîne (ch,1, inverse := ch [length(ch)] + inverse long(ch)-1)) (copy (ch,1, length(ch)-1)) fin si end; 3. Application: Ecrire une analyse, un algorithme dune fonction permettant de calculer le PGCD (plus grand commun diviseur) de deux entiers positifs non nuls a et b, en utilisant la méthode de la différence Exemple: PGCD (22 , 6 ) = PGCD ( 22-6, 6 ) = PGCD ( 16,6) car 22 > 6 = PGCD (16-6 ,6 ) = PGCD (10 , 6) car 16 > 6 = PGCD (10-6, 6) = PGCD (4, 6) car 10 > 6 = PGCD (4, 6-4) = PGCD (4, 2) car 4 < 6 = PGCD (4-2, 2) = PGCD (2, 2) car 4 > 2 =2 Page 2 sur 3
  • 3. ALGO & PROG PROF : Mohamed SAYARI* InterprétationOn remarque que:- Si a > b alors PGCD (a, b) = PGCD (a-b, a)- Si b>a alors PGCD (a, b) = PGCD (a, b-a)- Si a=b alors PGCD (a, b)=a (*** condition darrêt ****)Nous remarquons quon a appelé la même fonction PGCD pour calculer le PGCD de a et b. Il sagit dun traitement récursifLa fonction PGCD devient:0) Fonction PGCD (a, b : entier) : entier1) Si a=b alors PGCD  a Sinon si a>b alors PGCD  PGCD (a-b, b) Sinon PGCD  PGCD (a, b-a) Finsi2) Fin PGCD IV. Remarques :1. Activité 3:  Ecrire un programme pascal qui permet de chercher et d’afficher l’inverse d’une chaîne de caractères. (Utiliser au moins un module défini selon un procédé récursif).  Testez avec les chaînes suivantes et déterminer les résultats trouvés : Chaîne à introduire Valeur retournée par le programme "Salut" …………………………. "Bonjour" …………………………. "azertyuiopqsdfghjk" ………………………….  Le programme a généré une erreur d’exécution. Rendez-vous au help de pascal, et consulter la signification de l’erreur. L’erreur est due à un débordement de mémoire.2 . C o n s ta ta tio n 3La récursivité utilise toujours la pile du programme en cours. (La pile est la mémoire stockantles données intermédiaires de sous-programmes). lorsque le nombre des appels devientimportant, la pile déborde. (cas de la chaîne azertyuiopqsdfghjk  ) V. Applications : Série N°2 Page 3 sur 3