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

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

Présentations similaires


Présentation au sujet: "1 RECURSIVITE PRESENTATION Ch. PAUL ALGORITHMIQUE Présentation de la récursivité."— Transcription de la présentation:

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

2 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

3 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 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 5 Exemple de définition récurrente : Factorielle 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); } 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; } Ch. PAUL ALGORITHMIQUE Présentation de la récursivité

6 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 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 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 9 Modèle de fonction récursive directe void recursive(void) { if (test arrêt) recursive() } Ch. PAUL ALGORITHMIQUE Présentation de la récursivité

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

11 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 12 Récursive directe exemple avec 3 appels récursifs void rec(void) { if (cont) rec() } Ch. PAUL ALGORITHMIQUE Présentation de la récursivité void rec(void) { if (cont) rec() } void rec(void) { if (cont) rec() } appel récursif : branchement retour récursif : instruction suivante de la fonction appelante 1 2 3 4 5 6


Télécharger ppt "1 RECURSIVITE PRESENTATION Ch. PAUL ALGORITHMIQUE Présentation de la récursivité."

Présentations similaires


Annonces Google