Algorithmes récursifs. Les tours de Hanoï : le problème. Nour-Eddine Oussous, Éric Wegrzynowski. 20 septembre 2006

Documents pareils
Corrigé des TD 1 à 5

Programmation linéaire

Baccalauréat S Antilles-Guyane 11 septembre 2014 Corrigé

Chapitre 6. Fonction réelle d une variable réelle

Fonctions de plusieurs variables

Algorithmes récursifs

Initiation à l algorithmique

CHAPITRE V SYSTEMES DIFFERENTIELS LINEAIRES A COEFFICIENTS CONSTANTS DU PREMIER ORDRE. EQUATIONS DIFFERENTIELLES.

Baccalauréat ES Pondichéry 7 avril 2014 Corrigé

Objets Combinatoires élementaires

Probabilités sur un univers fini

Cours 1 : Introduction Ordinateurs - Langages de haut niveau - Application

Introduction à l étude des Corps Finis

Manuel d utilisation 26 juin Tâche à effectuer : écrire un algorithme 2

EPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE

Eteindre. les. lumières MATH EN JEAN Mme BACHOC. Elèves de seconde, première et terminale scientifiques :

Cours Informatique Master STEP

Distribution Uniforme Probabilité de Laplace Dénombrements Les Paris. Chapitre 2 Le calcul des probabilités

Introduction à MATLAB R

Continuité et dérivabilité d une fonction

= constante et cette constante est a.

Logiciel Libre Cours 3 Fondements: Génie Logiciel

Définitions. Numéro à préciser. (Durée : )

Cours 1 : La compilation

1 de 46. Algorithmique. Trouver et Trier. Florent Hivert. Mél : Florent.Hivert@lri.fr Page personnelle : hivert

1 Introduction C+ + Algorithm e. languag. Algorigramm. machine binaire. 1-1 Chaîne de développement. Séance n 4

Rappels sur les suites - Algorithme

UEO11 COURS/TD 1. nombres entiers et réels codés en mémoire centrale. Caractères alphabétiques et caractères spéciaux.

Probabilités sur un univers fini

Exercices - Polynômes : corrigé. Opérations sur les polynômes

Compilation (INF 564)

Organigramme / Algorigramme Dossier élève 1 SI

Raisonnement par récurrence Suites numériques

Chapitre 7. Récurrences

Algorithmique & programmation

Feuille TD n 1 Exercices d algorithmique éléments de correction

Problème : Calcul d'échéanciers de prêt bancaire (15 pt)

Polynômes à plusieurs variables. Résultant

LES TYPES DE DONNÉES DU LANGAGE PASCAL

Représentation d un entier en base b

INTRODUCTION À L ANALYSE FACTORIELLE DES CORRESPONDANCES

Recherche dans un tableau

Travaux pratiques. Compression en codage de Huffman Organisation d un projet de programmation

La fonction exponentielle

Sujet proposé par Yves M. LEROY. Cet examen se compose d un exercice et de deux problèmes. Ces trois parties sont indépendantes.

Génie Logiciel avec Ada. 4 février 2013

Problème 1 : applications du plan affine

Plan du cours : électricité 1

Baccalauréat L spécialité, Métropole et Réunion, 19 juin 2009 Corrigé.

Optimisation non linéaire Irène Charon, Olivier Hudry École nationale supérieure des télécommunications

Cours 1 : Qu est-ce que la programmation?

Qu est-ce qu une probabilité?

Fonctions de deux variables. Mai 2011

Simulation de variables aléatoires

Université du Québec à Chicoutimi. Département d informatique et de mathématique. Plan de cours. Titre : Élément de programmation.

Intégration et probabilités TD1 Espaces mesurés

Probabilités. Rappel : trois exemples. Exemple 2 : On dispose d un dé truqué. On sait que : p(1) = p(2) =1/6 ; p(3) = 1/3 p(4) = p(5) =1/12

Logiciel Libre Cours 2 Fondements: Programmation

Licence Sciences et Technologies Examen janvier 2010

Qualité du logiciel: Méthodes de test

Chapitre 1 : Évolution COURS

Résolution de systèmes linéaires par des méthodes directes

Représentation des Nombres

Capacité d un canal Second Théorème de Shannon. Théorie de l information 1/34

Items étudiés dans le CHAPITRE N5. 7 et 9 p 129 D14 Déterminer par le calcul l'antécédent d'un nombre par une fonction linéaire

Baccalauréat ES/L Amérique du Sud 21 novembre 2013

Baccalauréat ES Polynésie (spécialité) 10 septembre 2014 Corrigé

Déroulement. Evaluation. Préambule. Définition. Définition. Algorithmes et structures de données 28/09/2009

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

CH.6 Propriétés des langages non contextuels

Cours de Programmation 2

AC AB. A B C x 1. x + 1. d où. Avec un calcul vu au lycée, on démontre que cette solution admet deux solutions dont une seule nous intéresse : x =

Image d un intervalle par une fonction continue

Chapitre 3. Quelques fonctions usuelles. 1 Fonctions logarithme et exponentielle. 1.1 La fonction logarithme

Ordonnancement temps réel

Commun à tous les candidats

FONCTION EXPONENTIELLE ( ) 2 = 0.

* très facile ** facile *** difficulté moyenne **** difficile ***** très difficile I : Incontournable T : pour travailler et mémoriser le cours.

Probabilités Loi binomiale Exercices corrigés

Algorithmique et Programmation Fonctionnelle

SYSTÈME DE GESTION DE FICHIERS

Cours de Probabilités et de Statistique

1 Recherche en table par balayage

Enseignement secondaire technique

Programme détaillé BTS INFORMATIQUE DE GESTION DIPLÔME D ETAT. Objectifs de la formation. Les métiers. Durée de la formation

Théorie des Graphes Cours 3: Forêts et Arbres II / Modélisation

SYSTÈME DE GESTION DE FICHIERS SGF - DISQUE

* très facile ** facile *** difficulté moyenne **** difficile ***** très difficile I : Incontournable

Introduction à la théorie des graphes. Solutions des exercices

Sub CalculAnnuite() Const TITRE As String = "Calcul d'annuité de remboursement d'un emprunt"

Bac Blanc Terminale ES - Février 2011 Épreuve de Mathématiques (durée 3 heures)

IN Cours 1. 1 Informatique, calculateurs. 2 Un premier programme en C

Réalisabilité et extraction de programmes

Cryptographie et fonctions à sens unique

FONCTIONS DE PLUSIEURS VARIABLES (Outils Mathématiques 4)

I Stabilité, Commandabilité et Observabilité Introduction Un exemple emprunté à la robotique Le plan Problème...

Contexte. Pour cela, elles doivent être très compliquées, c est-à-dire elles doivent être très différentes des fonctions simples,

Créer le schéma relationnel d une base de données ACCESS

F1C1/ Analyse. El Hadji Malick DIA

Logique. Plan du chapitre

Transcription:

Plan Introduction Types de récursivité Récursivité en Pascal Conclusion Plan Introduction Types de récursivité Récursivité en Pascal Conclusion Nour-Eddine Oussous, Éric Wegrzynowski 20 septembre 2006 Introduction Exemple 1 Exemple 2 Exemple 3 Définition Exemples Exécution d un algorithme récursif Types de récursivité Récursivité simple ou linéaire Récursivité multiple Récursivité croisée ou mutuelle Récursivité en Pascal Factorielle en Pascal Tours de Hanoï en Pascal Prédicats de parité en Pascal Conclusion Plan Introduction Types de récursivité Récursivité en Pascal Conclusion Plan Introduction Types de récursivité Récursivité en Pascal Conclusion Exemple 1 Les tours de Hanoï : le problème En programmation, de nombreux problèmes résolus par répétition de tâches certains langages (comme Pascal) munis de structures de contrôles répétitives : boucles pour et tant que Mais certains problèmes se résolvent simplement en résolvant des problèmes identiques C est la récursivité Règles (opérations élémentaires) 1. déplacer un disque à la fois d un bâton sur un autre 2. ne jamais mettre un disque sur un plus petit But : transférer la pile de disques de A vers B.

Plan Introduction Types de récursivité Récursivité en Pascal Conclusion Plan Introduction Types de récursivité Récursivité en Pascal Conclusion Exemple 1 Les tours de Hanoï : une solution? 1. Mettre tous les disques sauf le plus grand sur C 2. Déplacer le plus grand disque de A vers B 3. Mettre tous les disques de C sur B Exemple 1 Les tours de Hanoï : une solution Les points 1 et 3 de la solution esquissée sont des problèmes de Hanoï avec un disque de moins si on sait résoudre le problème avec n 1 disques, alors on sait le résoudre avec n disques Or on sait résoudre le problème avec 1 disque le problème est résolu pour tout nombre n 1 de disques (principe de récurrence) La solution est récursive Plan Introduction Types de récursivité Récursivité en Pascal Conclusion Plan Introduction Types de récursivité Récursivité en Pascal Conclusion Exemple 2 Calcul de dérivées Règles de dérivation (u + v) = u + v (u v) = u v (uv) = u v + uv ( u ) v = u v uv... v 2 pour dériver il faut savoir dériver! Or on sait dériver les fonctions de base on sait dériver toutes les fonctions (dérivables bien entendu!). Le calcul est récursif Exemple 3 Calcul de factorielle Soit à calculer n! = 1 2 3 (n 1) n On sait que pour n > 0, n! = n (n 1)! si on sait calculer (n 1)!, alors on sait calculer n! Or on sait calculer 0! = 1 on sait calculer n! pour tout n 0 Le calcul est récursif

Plan Introduction Types de récursivité Récursivité en Pascal Conclusion Plan Introduction Types de récursivité Récursivité en Pascal Conclusion Définition Exemples Définition Un algorithme de résolution d un problème P sur une donnée a est dit récursif si parmi les opérations utilisées pour le résoudre, on trouve une résolution du même problème P sur une donnée b. Appel récursif Dans un algorithme récursif, on nomme appel récursif toute étape de l algorithme résolvant le même problème sur une autre donnée. Tours de Hanoï H(n, D, A, I ) = problème de déplacement de n disques depuis la tour D vers la tour A avec la tour intermédiaire I H(n,D,A,I ) : s i n = 1 a l o r s d e p l a c e r d i s q u e de D v e r s A H(n 1,D,I,A) ; d e p l a c e r d i s q u e de D v e r s A ; H(n 1,I,A,D ) ; Plan Introduction Types de récursivité Récursivité en Pascal Conclusion Plan Introduction Types de récursivité Récursivité en Pascal Conclusion Exemples Exemples Dérivation deriver(f ) = problème du calcul de la dérivée de f d e r i v e r (f ) : s i f e s t une fonction de base a l o r s donner l a d e r i v e e de f s i f e s t de l a forme u + v a l o r s d e r i v e r (u ) + d e r i v e r (v ) s i f e s t de l a forme u v a l o r s... Factorielle fact(n) = problème du calcul de n! f a c t (n ) : f a c t ( 0 ) = 1 f a c t (n) = n f a c t (n 1)

Plan Introduction Types de récursivité Récursivité en Pascal Conclusion Plan Introduction Types de récursivité Récursivité en Pascal Conclusion Exécution d un algorithme récursif Exécution d un algorithme récursif Exécution de l algorithme des tours de Hanoï pour déplacer trois disques de la tour A vers la tour B Calcul de 4! : fact(4) 4 fact(3) 4 3 fact(2) 4 3 2 fact(1) 4 3 2 1 fact(0) 4 3 2 1 1 24 En rouge, la suite des déplacements effectués au cours de l exécution de l algorithme. Plan Introduction Types de récursivité Récursivité en Pascal Conclusion Plan Introduction Types de récursivité Récursivité en Pascal Conclusion Attention Il existe des algorithmes récursifs qui ne produisent aucun résultat f a c t (n ) : f a c t (n) = n f a c t (n 1) fact(1) 1 fact(0) 1 0 fact(-1)... calcul infini Première règle Tout algorithme récursif doit distinguer plusieurs cas, dont l un au moins ne doit pas comporter d appel récursif. risque de cercles vicieux et de calcul infini Condition de terminaison, cas de base Les cas non récursifs d un algorithme récursif sont appelés cas de base. Les conditions que doivent satisfaire les données dans ces cas de base sont appelées conditions de terminaison.

Plan Introduction Types de récursivité Récursivité en Pascal Conclusion Plan Introduction Types de récursivité Récursivité en Pascal Conclusion Attention Même avec un cas de base un algorithme récursif peut ne produire aucun résultat f a c t (n ) : f a c t ( 0 ) = 1 f a c t (n) = f a c t (n + 1) / (n + 1) fact(1) fact(2)/2 fact(3)/(2 3)... calcul infini Seconde règle Tout appel récursif doit se faire avec des données plus «proches» de données satisfaisant une condition de terminaison. Théorème Il n existe pas de suite infinie strictement décroissante d entiers positifs ou nuls. Ce théorème permet de contrôler l arrêt d un calcul suivant un algorithme récursif. Plan Introduction Types de récursivité Récursivité en Pascal Conclusion Plan Introduction Types de récursivité Récursivité en Pascal Conclusion Récursivité simple ou linéaire Récursivité simple ou linéaire L algorithme de calcul de n! est récursif simple. Récursivité simple ou linéaire Un algorithme récursif est simple ou linéaire si chaque cas qu il distingue se résout en au plus un appel récursif. f a c t (n ) : f a c t ( 0 ) = 1 f a c t (n) = n f a c t (n 1)

Plan Introduction Types de récursivité Récursivité en Pascal Conclusion Plan Introduction Types de récursivité Récursivité en Pascal Conclusion Récursivité multiple Récursivité multiple Récursivité multiple Un algorithme récursif est multiple si l un des cas qu il distingue se résout avec plusieurs appels récursifs. Dans le cas où il y a deux appels récursifs on parle de récursivité binaire. L algorithme des tours de Hanoï est récursif binaire H(n,D,A,I ) : s i n = 1 a l o r s d e p l a c e r d i s q u e de D v e r s A H(n 1,D,I,A) ; d e p l a c e r d i s q u e de D v e r s A ; H(n 1,I,A,D ) ; Plan Introduction Types de récursivité Récursivité en Pascal Conclusion Plan Introduction Types de récursivité Récursivité en Pascal Conclusion Récursivité croisée ou mutuelle Récursivité croisée ou mutuelle Parité d un entier P(n) = prédicat de test de parité de l entier n. I (n) = prédicat de test d «imparité» de l entier n. La récursivité peut parfois être cachée. Récursivité mutuelle Deux algorithmes sont mutuellement récursifs si l un fait appel à l autre, et l autre fait appel à l un. Solution mutuellement récursive P(n ) : P(n) = v r a i P(n) = I (n 1) I (n ) : I (n) = f a u x I (n) = P(n 1)

Plan Introduction Types de récursivité Récursivité en Pascal Conclusion Plan Introduction Types de récursivité Récursivité en Pascal Conclusion Récursivité croisée ou mutuelle Évaluation de P(2) : P(2) I(1) P(0) vrai Évaluation de P(3) : P(3) I(2) P(1) I(0) faux Pascal permet d exprimer les algoritmes récursifs. Les fonctions et les procédures peuvent être récursives. Un appel récursif s écrit simplement en faisant référence au nom de la fonction ou de la procédure. Il faut utiliser le mot-clé forward pour les fonctions ou procédures mutuellement récursives. Plan Introduction Types de récursivité Récursivité en Pascal Conclusion Plan Introduction Types de récursivité Récursivité en Pascal Conclusion Factorielle en Pascal Tours de Hanoï en Pascal Une procédure de résolution des tours de Hanoï : Une fonction de calcul de n! // f a c t (n) = n! function f a c t ( n : CARDINAL) : CARDINAL ; begin i f n=0 then f a c t := 1 e l s e f a c t := n f a c t ( n 1); end { f a c t } ; // hanoi ( n, d, a, i ) d e p l a c e n d i s q u e s // de l a t o u r d v e r s l a t o u r a en u t i l i s a n t // l a t o u r i comme t o u r i n t e r m e d i a i r e procedure hanoi ( const n : CARDINAL ; const d, a, i : TOURS ) ; begin i f n=1 then d e p l a c e r D i s q u e ( d, a ) e l s e begin hanoi ( n 1,d, i, a ) ; d e p l a c e r D i s q u e ( d, a ) ; hanoi ( n 1, i, a, d ) ; end { i f } ; end { hanoi } ;

Plan Introduction Types de récursivité Récursivité en Pascal Conclusion Plan Introduction Types de récursivité Récursivité en Pascal Conclusion Prédicats de parité en Pascal Les prédicats de test de parité : // i m p a i r (n) = v r a i s i e t s e u lement s i n e s t i m p a i r function i m p a i r ( n : CARDINAL) : BOOLEAN; forward ; // p a i r (n) = v r a i s i e t s e u lement s i n e s t p a i r function p a i r ( n : CARDINAL) : BOOLEAN; begin i f n=0 then p a i r := true e l s e p a i r := i m p a i r ( n 1); end { p a i r } ; function i m p a i r ( n : CARDINAL) : BOOLEAN; begin i f n=0 then i m p a i r := f a l s e e l s e i m p a i r := p a i r ( n 1); end { i m p a i r } ; La récursivité est un moyen naturel de résolution de certains problèmes. Tout algorithme peut s exprimer de manière récursive. Beaucoup de langages de programmation, dont Pascal, permettent d exprimer des algorithmes récursifs.