Chapter 11: Récursivité Java Software Solutions Second Edition

Slides:



Advertisements
Présentations similaires
CSI1502 Introduction au génie logiciel
Advertisements

Cours de Langage C Récursivité. Objectifs de la séance 11 Connaître la récursivité. Mesurer un temps d’exécution. 2.
Nombres et calculs Attendus de fin de cycle: Attendus de fin de cycleÉclairages Cycle 3  Utiliser et représenter les grands nombres entiers, des fractions.
Comment utiliser le débogueur de Visual Studio /8/2015 INF145 1 Créé par Julien Galarneau Allaire, révisé par Eric Thé S.E.G.
Exploitation de mesures scientifiques.
Le Mouvement Directionnel
POWER QUERY Les FONCTIONS.
Exercice On considère un Système de contrôle de température composé de: Capteur, ordinateur Le capteur transmit à chaque heure de la journée la température.
Information, Communication, Calcul
CHAPITRE 2 : LES DISTANCES DANS L’UNIVERS
Les Instructions Itératives (Les Boucles)
LES TABLEAUX EN JAVA.
Algorithme et programmation
Droits d’accès On peut personnaliser, ou sécuriser l’accès à Temps 2000 : Options générales : préférence commune (fenêtres ci-dessous), Préférence du poste.
Algorithmique AU El harchaoui noureddine
1.3 COORDONNÉES DES POINTS
Algorithmique demander jeu du pendu.
Chapitre 3: Esquisser le graphique d’une fonction
Section 1.1 : Unités du système international (SI)
L’Instruction de Test Alternatif
IFT 615 – Intelligence artificielle Recherche heuristique
JAVA et POO : Notion d'héritage
Communiquer des idées Podcast Fiche 3b Préparer votre podcast Conseils
Javadoc et débogueur Semaine 03 Version A16.
Les Instructions – Organigramme
Principes de programmation (suite)
Initiation à la programmation impérative et algorithmique
2°9 lycée Beauregard à Montbrison
Algorithmique & Langage C
STRATÉGIES ET INSTRUMENTS D´ÉVALUATION
Routage S 3 - Questionnaire N°1
Programmation Impérative II
Implantation d’un îlot ou d’une Chaîne de Production
Tableau de bord des risques
L ES I NSTRUCTIONS I TÉRATIVES (L ES B OUCLES ) Réalisé par : OUZEGGANE Redouane Département de Technologie Faculté de Technologie – Université A.Mira,
Information, Communication, Calcul
Algorithmique & Langage C IUT GEII S1 Notes de cours (deuxième partie)
Documentation technique (Linux)
ESPRIT D’ENTREPRENDRE
Chapitre 5: Modélisation simple
1.2 dénombrement cours 2.
Chapter 12: Structures de données
Chapitre 3 : Caractéristiques de tendance centrale
Gestion de Stocks & Achats
Question flash TSTI2D.
Difficultés d’apprentissage
Université de la méditerranée
Que veux dire être en forme ou avoir la forme?
De Scratch à Python : une transition douce… COMMUNICATION
L’expérimentation de la médiation préalable obligatoire
Le code de Huffman: est une méthode de compression statistique de données qui permet de réduire la longueur du codage d'un alphabet. Le code de Huffman.
Présentation 9 : Calcul de précision des estimateurs complexes
Chapitre 3: Les scriptes
MATHÉMATIQUES FINANCIÈRES I
Information, Calcul, Communication
H. Wertz -- Exécution Symbolique
RABAH M ed Ali 2018/2019
Tris Simples/Rapides.
Flowchart Itération Cours 04.
PROGRAMMATION ET ENSEIGNEMENT
Les différents modes de démarrage de Windows
Le D.R.P. - Quelques jours de fonctionnement
[Tapez le titre du discours persuasif ici]
STS Web Services libres Gérer les services libres
[Tapez le titre du discours persuasif ici]
Evaluation de Maths 1 Evaluation de Maths 1 CM1 CM1
Type Tableau Partie 1 : Vecteurs
Cette activité se joue :
STS Web Services libres Constituer les services libres
Transcription de la présentation:

Chapter 11: Récursivité Java Software Solutions Second Edition Presentation slides for Java Software Solutions Foundations of Program Design Second Edition by John Lewis and William Loftus Java Software Solutions is published by Addison-Wesley Presentation slides are copyright 2000 by John Lewis and William Loftus. All rights reserved. Instructors using the textbook may use and modify these slides for pedagogical purposes.

Récursivité La récursivité est une technique fondamentale de la programmation qui peut offrir une solution élégante pour certains problèmes Chapitre 11 se concentre sur: Penser d’une manière récursive Programmer d’une manière récursive L’utilisation correcte de la récursivité Exemples illustrant la récursivité

Pensée récursive Une définition récursive est une définition qui utilise le mot ou le concept en cours de définition dans la définition elle-même Lors de la définition d’un mot anglais, souvent une définition récursive n’aide pas Mais dans d’autres situations, une définition récursive peut être une façon appropriée pour exprimer un concept Avant d’appliquer la récursivité à la programmation, il est mieux de pratiquer à penser récursivement

Définitions Récursives Considérer la liste de nombres suivante: 24, 88, 40, 37 Une telle liste peut être définie comme Une LISTE est un: nombre ou un: nombre virgule une LISTE C’est-à-dire, une LISTE est définie comme étant un nombre ou un nombre suivi par une virgule suivi par une LISTE Le concept de LISTE est utilisé dans la définition de lui-même

Définitions récursives La partie récursive de la définition de LISTE est utilisée plusieurs fois et elle est terminée par une partie non-récursive: nombre virgule LISTE 24 , 88, 40, 37 88 , 40, 37 40 , 37 nombre 37

Récursivité infinie Toutes les définitions récursives doivent avoir une partie non-récursive Sinon, il n’y aurait pas un moyen pour terminer le chemin récursif Une telle définition pourrait causer une récursivité infinie Ce problème est similaire à une boucle infinie, mais cette boucle fait partie de sa définition La partie non-récursive est souvent appelée la base

Définitions récursives N!, pour chaque entier positive N, est défini comme étant le produit de tous les entiers entre 1 et N inclusivement Cette définition peut être exprimée récursivement comme suit: 1! = 1 N! = N * (N-1)! Le concept de factoriel est défini en terme d’un autre factoriel Finalement, la base de 1! est atteinte

Définitions récursives 5! 5 * 4! 4 * 3! 3 * 2! 2 * 1! 1 2 6 24 120

Programmation récursive Une méthode en Java peut appeler elle-même. Si c’est le cas, elle est appelée méthode récursive Le code d’une méthode récursive doit être structuré de façon à clairement exposer le traitement de la base et le traitement de la partie récursive Chaque appel à la méthode initialise un nouveau environnement d’exécution avec de nouveaux paramètres et variables locales Comme toujours, quand une méthode termine de s’exécuter, le contrôle retourne à la méthode qui l’a appelé (qui peut être la méthode elle-même)

Programmation récursive Considérer le problème du calcul de la somme de tous les nombres entre 1 et tout entier positive N Ce problème peut être défini récursivement comme suit: i = 1 N N-1 N-2 = N + = N + (N-1) + = etc.

Programmation récursive main sum sum(3) sum(1) sum(2) result = 1 result = 3 result = 6

Programmation récursive Note qu’utiliser la récursivité pour résoudre certains problèmes ne veut pas dire qu’on est obligé de l’utiliser pour résoudre ces problèmes Par exemple, nous n’utilisons pas d’habitude la récursivité pour résoudre le problème de la somme des nombres entre 1 et N, parce que la version itérative est facile à comprendre Cependant, pour certains problèmes, la récursivité offre une solution élégante qui est souvent plus claire qu’une solution itérative Pour chaque problème, vous devez prudemment décider si la récursivité est la technique convenable pour le résoudre

Récursivité indirecte Quand une méthode invoque elle-même, on a une récursivité directe Une méthode pourrait invoquer une autre méthode qui invoque une autre méthode, etc., jusqu’à ce que la méthode originale est encore une fois appelée Par exemple, la méthode m1 pourrait invoquer m2 qui invoque m3 qui invoque encore une fois m1 Ceci est appelé récursivité indirecte, et requiert une prudence comme pour le cas de la récursivité directe Elle est souvent plus difficile à tracer et à débuguer

Récursivité indirecte m1 m2 m3

Traverser un labyrinthe Nous pouvons utiliser la récursivité pour trouver un chemin dans un labyrinthe À partir de chaque location, nous pouvons chercher dans chaque direction La récursivité garde la trace du chemin à travers le labyrinthe La base est un mouvais mouvement ou la destination finale est atteinte Voir MazeSearch.java (page 472) Voir Maze.java (page 474)

Tours de Hanoi Les tours de Hanoi est un casse-tête fait à partir de trois piquets verticaux et quelques disques fixés sur ceux-ci Les disques sont de tailles variées. Ils sont initialement placés sur un des piquets. Le grand disque en bas et les autres, en ordre croissant des tailles, sont en haut L’objectif est de déplacer tous les disques d’un piquet à un autre tout en respectant les règles suivantes: Nous ne pouvons déplacer qu’un seul disque à la fois Nous ne pouvons pas déplacer un grand disque sur un petit disque

Tours de Hanoi Une solution itérative pour les tours de Hanoi est complexe Une solution récursive est courte et élégante Voir SolveTowers.java (page 479) Voir TowersOfHanoi.java (page 480)