1 / 12

RECURSIVITE PRESENTATION

RECURSIVITE PRESENTATION. Récursivité. Principe de base de la récursivité dans les langages de programmation Quelques exemples incontournables… Traitement récursif des listes Traitement récursif des arbres. Conditions d ’application. Définition récurrente d’un ensemble :

calum
Download Presentation

RECURSIVITE PRESENTATION

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. RECURSIVITE PRESENTATION Ch. PAUL ALGORITHMIQUE Présentation de la récursivité

  2. Récursivité • Principe de base de la récursivité dans les langages de programmation • Quelques exemples incontournables… • Traitement récursif des listes • Traitement récursif des arbres Ch. PAUL ALGORITHMIQUE Présentation de la récursivité

  3. Conditions d ’application • Définition récurrente d’un ensemble : Description des éléments de base + Règles de construction récursive • Les règles de construction récursives permettent de caractériser les éléments d'un ensemble à partir d'éléments plus simples du même ensemble (en général obtenus ou construits à l'étape précédente). • Il y a toujours un – ou plusieurs – éléments de base. Ch. PAUL ALGORITHMIQUE Présentation de la récursivité

  4. Récursivité en informatique • En informatique les traitements récursifs doivent s ’appliquer à partir d’un modèle récursif cohérent. • S'il s'agit des éléments d'un ensemble, ils doivent être construits à partir d'une définition récursive et d'un élément de base. (Suite de fibonacci…) • S'il s'agit d'une méthode de résolution, le problème à résoudre doit se décomposer en sous-problèmes de même nature, et ce jusqu'à une formulation élémentaire (problème de base). Ch. PAUL ALGORITHMIQUE Présentation de la récursivité

  5. Exemple de définition récurrente : Factorielle • Formule • Fact(0) = 1 , n = 0 ; • Fact(n) = 1*2*3…*n, n > 0 ; • Fonction C associée • long factit (int n) • { int fact=1; • while (n > 0) • { fact =fact*n; n--;} • return fact; • } • Récurrence Fact(0) = 1, n = 0; Fact(n) = Fact(n-1)*n, n > 0; Fonction C associée long factrec (int n) { if (n == 0) return 1; return n*factrec(n-1); } Ch. PAUL ALGORITHMIQUE Présentation de la récursivité

  6. Suite de nombre de Fibonnacci • Définition : Fibo(1) = Fibo(2) = 1, Fibo(n) = Fibo(n-1) + Fibo(n-2) pour n > 2, • Fonction C associée int fibo (int n) { if ((n==1)||(n==2)) return 1; if (n>2) return (fibo(n-1)+fibo(n-2)); } Ch. PAUL ALGORITHMIQUE Présentation de la récursivité

  7. Récursivité dans les langages de programmation • Dans les langages de programmation la récursivité est la possibilité donnée à une fonction (ou une procédure) à s’appeler (se rappeler) elle-même. • Les schémas de programmation qui en découlent sont en général plus simples et plus concis. • Le prix à en payer est en général une consommation mémoire à l’exécution plus importante et un temps de traitement plus long. Ch. PAUL ALGORITHMIQUE Présentation de la récursivité

  8. Récursivité dite directe Une fonction qui s’appelle elle-même. • L’appel récursif est conditionné à un test. Les instructions de pré traitement se déroulent avant l’appel récursif. Les instruction de post traitement après l’appel récursif. • Attention les variables déclarées en local ne changent pas de valeur. • Les variables globales ou modifiées par leurs adresses peuvent ne plus avoir les mêmes valeurs avant et après l’appel récursif. Ch. PAUL ALGORITHMIQUE Présentation de la récursivité

  9. Modèle de fonction récursive directe void recursive(void) { <instructions de pré-taitement> if (test arrêt) recursive() <instructions de post-traitement> } Ch. PAUL ALGORITHMIQUE Présentation de la récursivité

  10. Modèle de fonctions récursives indirectes Récursivité indirecte Une fonction A appelle une fonction B. La fonction B appelle la fonction A. void recursiveA(void) { <instructions A1> if (test continuation B) recursiveB(); <instruction A2> } • void recursiveB(void) • { • <instructions B1> • if (test continuation A) • recursiveA(); • <instruction B2> • } Ch. PAUL ALGORITHMIQUE Présentation de la récursivité

  11. Récursivité directe : exemple • Une fonction rec() qui s'appelle elle même 3 fois. • chaque nouvel appel conserve l'adresse de retour. • Les instructions de pré-traitement sont exécutées avant les appels récursifs. • Les instructions de post-traitement sont exécutées après les appels récursifs, dans l'ordre de dépilement, c'est à dire inverse. Ch. PAUL ALGORITHMIQUE Présentation de la récursivité

  12. Récursive directe exemple avec 3 appels récursifs void rec(void) { <inst pré> if (cont) rec() <inst post> } • voidrec(void) • { <inst pré> • if (cont) rec() • <inst post> • } 1 2 • voidrec(void) • { <inst pré> • if (cont) rec() • <inst post> • } 3 6 5 4 appel récursif : branchement retour récursif : instruction suivante de la fonction appelante Ch. PAUL ALGORITHMIQUE Présentation de la récursivité

More Related