La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

CPI/BTS 2 Algorithmique & Programmation La récursivité Algo – Prog CPI/BTS2 – M. Dravet – 14/09/2003 Dernière modification: 14/09/2003.

Présentations similaires


Présentation au sujet: "CPI/BTS 2 Algorithmique & Programmation La récursivité Algo – Prog CPI/BTS2 – M. Dravet – 14/09/2003 Dernière modification: 14/09/2003."— Transcription de la présentation:

1 CPI/BTS 2 Algorithmique & Programmation La récursivité Algo – Prog CPI/BTS2 – M. Dravet – 14/09/2003 Dernière modification: 14/09/2003

2 La récursivité Définition récursive d’un objet –Récursif: (adjectif), voir récursif. –La définition ou la description d’un objet X est récursive dès lors qu’elle fait référence à l’objet X lui- même (récursivité directe) ou à un objet Y dont la définition fait référence directement ou indirectement à X (récursivité indirecte).

3 La récursivité Exemples –Une chaîne de caractères est soit vide, soit constituée d’un caractère suivi d’une chaîne de caractères, –L’ ascendant d’une personne est soit son père, soit sa mère, soit un ascendant de son père ou de sa mère, –0 est un entier naturel. Le successeur d’un entier naturel est un entier naturel

4 Algorithmes récursifs Définition –Un algorithme (ou un sous-programme) est récursif lorsqu’il contient un ou plusieurs appels à lui-même (récursivité directe) ou à un autre algorithme (sous- programme) qui fait appel au premier. –La récursivité se retrouve souvent en algorithmique car elle permet de simplifier le travail de conception d’un algorithme.

5 Algorithmes récursifs Utilisation –L’utilisation de la récursivité dans l’écriture d’un algorithme est justifiée lorsque le problème posé peut se décomposer en sous problèmes de même nature mais de taille inférieure. –Pourquoi de taille inférieure ? Pour toujours avoir une condition de sortie …

6 Algorithmes récursifs Utilisation –Chaque sous problème est lui aussi décomposé en sous problèmes de même nature, et ainsi de suite jusqu’à ce que l’on obtienne des problèmes, dits triviaux, que l’on sait résoudre sans les décomposer. –Le dernier (ou plus bas) niveau de la récursivité qui permet d’obtenir des problèmes triviaux est aussi appelé “bottom” de la récursivité, ou cas d’arrêt.

7 Algorithmes récursifs Exemple –Un exemple facile de récursivité est donné par la définition mathématique de la factorielle. n! = n * (n - 1)! si n>0 et 0! = 1 –A partir de cette définition, on peut écrire très facilement un algorithme (ici une fonction) récursif qui calcule la valeur de n!

8 Algorithmes récursifs Exemple fonction Fact(données n:entier) : entier { retourne la valeur de n! pour tout n >= 0 } Début Si n = 0 Alors Fact retourne 1 Sinon Fact retourne n * Fact(n - 1) Fin si Fin

9 Algorithmes récursifs Exercice –Ecrire et analyser le déroulement de l’algorithme «Fact» de la diapositive précédente, afin d’en comprendre son fonctionnement.

10 Algorithmes récursifs Analyse –Lorsque l’on va demander “l’exécution” de cette fonction pour une valeur n strictement positive, la fonction va s’appeler elle-même pour calculer (n - 1)!, puis (n - 2)!, ainsi de suite jusqu’à lancer un appel Fact(0) qui est le cas trivial qu’elle résout tout de suite en retournant la valeur 1. –Cette valeur va alors “remonter” pour le calcul de fact(1), dont le résultat va remonter pour fact(2), ainsi de suite jusqu’à être revenu à fact(n).

11 Algorithmes récursifs Quand ne pas les utiliser ? –Quand il y a une solution itérative directe, –Quand la profondeur de la récursivité est “trop” grande et que cela entraîne un empilement de variables locales trop important. –Dans le cas de calculs redondants … Ex: Calcul d’une suite définie par la formule: U(0)=0, U(1)=1, U(N)=U(N-1)+U(N-2).

12 Algorithmes récursifs TP –Ecrire un programme avec fonction récursive calculant la valeur de la fonction d’Ackermann, définie pour m et n, entiers positifs ou nuls par: A(m,n) = A(m-1, A(m,n-1)) pour m>0 et n>0 A(0,n) = n+1 pour n> 0 A(m,0) = A(m-1,1) pour m>0 –Visualiser l’empilement des appels et leur dépilement par un message avec valeur des arguments –Le programme principal demande à l’utilisateur les valeurs de m et n.

13 Algorithmes récursifs TP function Ack (m, n: integer): integer; begin if m = 0 then return := n + 1 else if n = 0 then return := Ack (m - 1, 1) else return := Ack (m - 1, Ack (m, n - 1)); end;

14 Algorithmes récursifs –Récursion imbriquée La fonction d'Ackermann contient deux appels récursifs imbriqués, c'est ce qui la fait croître très rapidement. Un autre exemple est la fonction 91 de MacCarthy function f (n: integer): integer; begin if n > 100 then f := n - 10 else f := f(f(n+11)) end;

15 Algorithmes récursifs –Récursion imbriquée Le calcul de f(96) donne : f(96) = f(f(107) = f(97) = … = f(100) = f(f(111)) = f(101) = 91 On peut montrer que cette fonction vaut 91 si n 100. Cette fonction anecdotique, qui utilise la récursivité imbriquée, est intéressante car il n'est pas du tout évident qu'une telle définition donne toujours un résultat.

16 Algorithmes récursifs –Récursion imbriquée Par exemple, la fonction de Morris suivante: function g (m, n: integer): integer; begin if m = 0 then g := 1 else g := g(m - 1, g(m, n)); end; Exercice: Calculez g(1,0).

17 Algorithmes récursifs –Récursion imbriquée On a g(1,0) = g(0, g(1,0)) Cela forme une récursivité infinie: le calcul de g(1, 0) nécessite un nouveau calcul de g(1, 0). Bilan: il faut faire très attention aux intervalles de valeurs autorisés dans une fonction récursive, il y a possibilité de calcul infini. Dans un algo récursif, calcul infini = plantage car consommation de ressource exponentielle.

18 Algorithmes récursifs –A faire pour le prochain cours: se documenter sur l’algorithme de tri appelé QuickSort. –Le TP portera dessus et pourra être évalué pendant les deux heures.


Télécharger ppt "CPI/BTS 2 Algorithmique & Programmation La récursivité Algo – Prog CPI/BTS2 – M. Dravet – 14/09/2003 Dernière modification: 14/09/2003."

Présentations similaires


Annonces Google