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

La récursivité Mireille Goud HEG Vd AlgSD - Résurisivité.

Présentations similaires


Présentation au sujet: "La récursivité Mireille Goud HEG Vd AlgSD - Résurisivité."— Transcription de la présentation:

1 La récursivité Mireille Goud HEG Vd AlgSD - Résurisivité

2 Rappel sur les fonctions
Prototype : type_retour nom_fonction ( type_arg1 nom_1, type_arg2 nom_2, …, type_argn nom_n) ; AlgSD - Résurisivité

3 Rappel sur les fonctions
Définition de la fonction : type_retour nom_fonction ( type_arg1 nom_1, type_arg2 nom_2, …, type_argn nom_n)  { Instructions ; } AlgSD - Résurisivité

4 Arguments de la fonction
Ils sont utilisés dans la fonction comme des variables locales. La valeur des arguments est copiée à l’appel de la fonction dans une zone mémoire allouée pour les arguments et pour les variables locales. Cette zone mémoire est libérée à la fin de la fonction. AlgSD - Résurisivité

5 Définition d’un problème
itératif : défini par répétition d’une même opération. récursif : défini en terme de lui-même (définition par récurrence) AlgSD - Résurisivité

6 Définition Une fonction est récursive si elle s’appelle elle-même.
Une fonction récursive correspond à la définition récursive d’un problème. AlgSD - Résurisivité

7 Calcul de factoriel n Factoriel (n) = 1 si n = 0
= n x (n-1) x (n-2) x …. x 3 x 2 x 1 si n >0 Cette définition de factorielle (n) est dite itérative. AlgSD - Résurisivité

8 Programme itératif int factoriel (int n) { int fact = 1;
for (i = 1 ; i <= n ; i++) { fact = fact * i; } return (fact); AlgSD - Résurisivité

9 Calcul récursif de fact (n)
Factoriel (n) = 1 si n = 0 = n x factorielle (n-1) si n > 0 Cette définition de factorielle (n) est dite récursive. AlgSD - Résurisivité

10 Programme récursif int factorielle (int n) { int res; if (n == 0) {
} else { res = n * factorielle(n-1); } return res; AlgSD - Résurisivité

11 Fonctionnement Fact(3)-> n= 3 ; Res = 3*fact(2) n = 2
Res = 1*fact(0)-> n = return 1; return 1*1; return 2*1; return 3*2; Résultat : 6 AlgSD - Résurisivité

12 Algorithme récursif Test de fin de récursivité : Paramètre :
Résultat : une valeur Fin des appels récursifs Paramètre : Valeur modifiée à chaque appel AlgSD - Résurisivité

13 Utilisation de la récursivité
L’algorithme apparaît dans sa propre définition. La solution récursive plus courte plus lisible. Chaque appel récursif doit soit : résoudre une partie du problème soit réduire la taille du problème. AlgSD - Résurisivité

14 Limite de la récursivité
Certains langages ne supportent pas la récursivité. La récursivité est gourmande en temps et en mémoire, il ne faut l'utiliser seulement si elle apporte un avantage (simplicité) AlgSD - Résurisivité

15 Récursivité et itération
Les fonctions factorielle et Fibonacci ne sont pas de bons exemples d’utilisation de la récursivité Il existe une fonction itérative aussi simple et plus efficace. La récursivité coûte cher en temps CPU et en mémoire AlgSD - Résurisivité

16 Coût d’une itération Création d’un contexte d’exécution (mémoire pour les paramètres et les variables locales) Branchement au début de la fonction Desallocation de la mémoire allouée Retour à la fonction appelante AlgSD - Résurisivité

17 Fibonacci – version itérative
/* Calcule la nieme valeur de Fibonacci */ int fibonaccibis (int n) { int fn, fn_1, fn_2; int i; if (n == 0 || n == 1) { return (n); } else { fn_1 = 0; fn = 1; for (i = 2 ; i <= n; i++) { fn_2 = fn_1; fn_1 = fn; fn = fn_1 + fn_2; } return fn; AlgSD - Résurisivité

18 Suppression de la récursivité
Opération de dérécursivité On écrit d’abord l’algorithme récursif car il est plus facile Technique simple si la récursivité exprime une seule itération Technique difficile dans les autres cas et nécessite l’utilisation de piles AlgSD - Résurisivité

19 Récursivité simple Un seul appel récursif
Appel récursif dans la dernière action de l’algorithme (il n’y a plus d’instructions après cet appel récursif) AlgSD - Résurisivité

20 Récursif vers itératif
Instructions 1 si B alors Instructions 2 Appel récursif (suivant) Finsi tant que (B) faire Passer au suivant finfaire AlgSD - Résurisivité

21 Factorielle Récursif Itératif res <- 1 si (n > 1) alors
res <- n * Fact (n-1) Finsi tant que (n > 1) faire res <- n * res n <- n - 1 finfaire AlgSD - Résurisivité

22 Conclusion Formule récursive plus puissante mais plus coûteuse.
La récursivité complexe est difficile à supprimer. AlgSD - Résurisivité


Télécharger ppt "La récursivité Mireille Goud HEG Vd AlgSD - Résurisivité."

Présentations similaires


Annonces Google