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

Slides:



Advertisements
Présentations similaires
La boucle for : init7.c et init71.c
Advertisements

Chapitre annexe. Récursivité
Les fonctions A quoi ça sert ?
Fonctions & procédures
Introduction à l’Algorithmique
Calculs de complexité d'algorithmes
III- Les fonctions 1- Activité 02
Cours d'algorithmique 7 - Intranet 1 27 novembre 2006 Cours dAlgorithmique Dérécursion (début) : Équivalences entre programmes récursifs et programmes.
Les structures de contrôles itératives complètes
Points importants de la semaine Les commentaires. Les variables. Les instructions conditionnelles. Les instructions itératives (les boucles).
Points importants de la semaine Les fonctions. La portée. La passage par copie. Les tableaux.
Semaine #1 INF155 par Frédérick Henri.
18/10/2004 P. Van Roy, InfoT4, S5 1 Informatique T4 Solutions au Test du 18 octobre Peter Van Roy Département dIngénierie Informatique, UCL
ALGORITHMES RECURSIFS
Introduction à la programmation (420-PK2-SL) cours 12 Gestion des applications Technologie de linformation (LEA.BW)
Récursivité.
Dérécursivation Dérécursiver, c’est transformer un algorithme récursif en un algorithme équivalent ne contenant pas d’appels récursifs. Récursivité terminale.
Les éléments de base de l’algorithmique
La récursivité Une procédure est dite récursive si, et seulement si, elle fait appel à elle-même, soit directement soit indirectement Djamal Rebaïne Djamal.
CSI3525: Concepts des Langages de Programmation Notes # 12: Implementation des Sous-Programmes ( Lire Chapitre 9 )
Introduction à la récursivité
Points importants de la semaine Le paramétrage. La portée. Le passage par copie. Le passage par référence.
RESUMES Module II1 SOMMAIRE CYCLE 1 : Saisir – Afficher – Données
Algorithmique et Programmation
Standard Template Library (STL)
Bases de la programmation en C++ 1 Les enchaînementsdinstruction Séquentiels. Exécutions dinstructions les unes à la suite des autres. Instructions séparées.
Récursivité Définition récursive d’un problème. Critère d’arrêt et convergence. Performance des algorithmes récursifs. Résolution d’un problème à l’aide.
Principes de programmation (suite)
Sixième cours Les chaînes de caractères et le passage de paramètres par référence Passage de paramètres par référence String.h.
Semaine #1 INF135 par Frédérick Henri.
Points importants de la semaine Le préprocesseur. La conversion de types. Les fonctions.
Chapitre XI Gestion des erreurs et exceptions. 2 La gestion des erreurs et exceptions De nombreux problèmes peuvent survenir pendant lexécution dun programme:
LIFI-Java 2004 Séance du Jeudi 9 sept. Cours 1. La notion de langage Décrire une tâche à effectuer –programme Écrire à un haut niveau –facile pour lutilisateur.
1 La récursion. Nous avons vu qu'un programme est constitué d'un ensemble de fonctions. Il est possible pour une fonction donnée d'appeler une autre fonction.
Analyse des algorithmes
Partie II Sémantique.
Algorithmique et structures de données en C
Structures de données IFT-2000 Abder Alikacem La récursivité Semaine 5 Département dinformatique et de génie logiciel Édition Septembre 2009.
Procédures et fonctions
Plan cours La notion de pointeur et d’adresse mémoire.
Structures de données IFT-2000 Abder Alikacem La récursivité Département d’informatique et de génie logiciel Édition Septembre 2009.
Python Fonction et procédure
RAPPEL Qu’est ce qu’une structure de contrôle itérative ?
Le langage C Structures de données
Introduction au langage C Fonctions et Procédures
ETNA – 1ème année Guillaume Belmas –
Cours n° 3 Traitements en Java
Méthodes et outils de conception Introduction à la programmation Paramètre de retour Appel d’une fonction Portée des variables Définition Pourquoi les.
Les types composés Les enregistrements.
ISBN Chapitre 10 L'implémentation des sous- programmes.
Variables et environnement utilisateur W. Barhoumi.
Les algorithmes recursifs
Introduction à la récursivité
Conception de Programmes - IUT de Paris - 1ère année Quelques éléments du langage C++ Les références La surcharge de fonctions Les fonctions «
2005/2006 Structures de Données Introduction à la complexité des algorithmes.
CPI/BTS 2 Algorithmique & Programmation La récursivité Algo – Prog CPI/BTS2 – M. Dravet – 14/09/2003 Dernière modification: 14/09/2003.
UE MAREP Cours 8 : La pile d’exécution (Fonctions imbriquées et fonctions récursives) Patricia Renault UPMC 2005/2006.
Patricia Renault UPMC 2005/2006
1 Cours 6 Définitions de nouvelles procédures Transmissions de données/résultats Déclarations globales/locales Visibilités Interface/implementation.
8PRO107 Éléments de programmation Les tableaux. Étude de cas 1 Description du problème : Lire une liste d’entiers et l’afficher d’abord dans le même ordre.
Scripts et fonctions Instructions de contrôle
PRO-1027 Programmation Scientifique en C
La récursivité.
Structures de données IFT-2000 Abder Alikacem La récursivité Semaine 5 Département d’informatique et de génie logiciel Édition Septembre 2009.
Exercices sur les pointeurs. lireCar/remettreCar Lorsque l’on lit caractère par caractère, on ne peut pas savoir qu’on a atteint un caractère avant de.
Algorithmique Boucles et Itérations
Chap. 3 Récursion et induction. Les définitions par récurrence consistent à construire des objets finis, à partir d'autres, selon certaines règles. Les.
Introduction à l’Informatique Licence SPI Mme Delmotte.
IFT359 – Programmation fonctionnelle Thème 07 Fermeture, affectation ou monades 1.
Transcription de la présentation:

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

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

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é

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é

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é

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é

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é

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

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é

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

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

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é

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é

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é

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é

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é

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é

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é

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é

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é

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é

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