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

ITI1520 Lab #8: Récursivité Gilbert Arbez, Mohamad Eid, Daniel Amyot, Sylvia Boyd, Diana Inkpen et Alan Williams.

Présentations similaires


Présentation au sujet: "ITI1520 Lab #8: Récursivité Gilbert Arbez, Mohamad Eid, Daniel Amyot, Sylvia Boyd, Diana Inkpen et Alan Williams."— Transcription de la présentation:

1 ITI1520 Lab #8: Récursivité Gilbert Arbez, Mohamad Eid, Daniel Amyot, Sylvia Boyd, Diana Inkpen et Alan Williams

2 Objectifs Récursivité
2 exemples simples (pour rafraîchir votre mémoire) 3 exercices algorithmiques et de programmation

3 Récursivité – Exemple simple
Écrivez un algorithme récursif qui compte le nombre de chiffres dans un nombre entier non-négatif N. Exemple: si N = 34567, alors le résultat est 5. Si N = , alors le résultat est 10.

4 Récursivité – Algorithme
DONNÉE: N (un nombre entier non-négatif) INTERMÉDIAIRE: ResteDeChiffres (chiffres restants) RÉSULTAT: Compteur (nombre de chiffres dans N) EN-TÊTE: Compteur  NombreDeChiffres(N)

5 Récursivité – Algorithme - Suite
MODULE: ResteDeChiffres = N / 10 ResteDeChiffres = 0 ? vrai faux Compteur  NombreDeChiffres(ResteDeChiffres) Compteur  Compteur + 1 Compteur  1

6 Trace pour N = 254 Ligne N ResteDe Chiffres Comp-teur
Valeurs initiales 254 ? (1) ResteDeChiffres = N / 10 25 (2) ResteDeChiffres = 0 ? faux (3) Appel Compteur  NombreDeChiffres(ResteDeChiffres) (4) Compteur  Compteur + 1

7 Trace, page 2 Compteur  NombreDeChiffres(ResteDeChiffres)
Compteur  NombreDeChiffres(N) 25 Ligne N ResteDe Chiffres Comp-teur Valeurs initiales 25 ? (1) ResteDeChiffres = N / 10 2 (2) ResteDeChiffres = 0 ? faux (3) Appel Compteur  NombreDeChiffres(ResteDeChiffres) (4) Compteur  Compteur + 1

8 Trace , page 3 Compteur  NombreDeChiffres(ResteDeChiffres)
Compteur  NombreDeChiffres(N) 1 2 Ligne N ResteDe Chiffres Compteur Valeurs initiales 2 ? (1) ResteDeChiffres = N/10 (2) ResteDeChiffres = 0 ? vrai (5) Compteur  1 1

9 Trace , page 2 Compteur  NombreDeChiffres(ResteDeChiffres)
Compteur  NombreDeChiffres(N) 2 25 Ligne N ResteDe Chiffres Comp-teur Valeurs initiales 25 ? (1) ResteDeChiffres = N / 10 2 (2) ResteDeChiffres = 0 ? faux (3) Appel Compteur  NombreDeChiffres(ResteDeChiffres) 1 (4) Compteur  Compteur + 1

10 Trace, page 1 Ligne N ResteDe Chiffres Compteur Valeurs initiales 254
? (1) ResteDeChiffres = N / 10 25 (2) ResteDeChiffres = 0 ? faux (3) Appel Compteur  NombreDeChiffres(ResteDeChiffres) 2 (4) Compteur  Compteur + 1 3

11 Regardons comment le code fourni fonctionne
Voir CompteChiffres.java L’implémentation Java de cet algorithme a été augmentée avec des instructions d’affichage pour indiquer où nous entrons/sortons d’une invocation, et pour tracer la valeur locale de n): Immédiatement après la variable locale des déclarations 1: Entrant la méthode avec n = … Juste avant l’appel de la méthode récursive: 2: Appel récursif venant de n = … Juste après l’appel de la méthode récursive: 3: Revenant d’un appel récursif avec n = … Juste avant la commande “return” 4: Retournant de la méthode avec n = …, compteur = … Dans le cas de base 5: Cas de base avec n = …

12 2e exemple simple Écrivez un algorithme récursif qui vérifie si un tableau d’entier A est trié en ordre croissant. Note: croissant est différent de strictement croissant (où deux éléments ne peuvent pas être égaux) La taille de A est supérieure ou égale à 2. Exemples: A = {3, 6, 8, 5, 9}: Faux A = {4, 5, 6, 6, 9, 14}: Vrai

13 2e exemple - solution DONNÉES: A (tableau d’entiers)
N (taille du tableau A) RÉSULTAT: Trié (Booléen: vrai si A est trié) INTERMÉDIAIRE: TriéPetit (Booléen: vrai si un A plus petit est trié) EN-TÊTE: Trié  VérifieTrié(A,N) HYPOTHÈSE: N  2

14 2e exemple – solution simple
MODULE: N = 2? faux vrai Cas de base… TriéPetit  VérifieTrié(A, N-1) Trié  TriéPetit ET (A[N-2]  A[N-1]) Trié  A[0]  A[1]

15 2e exemple – solution efficace
Plus besoin de se rendre à A[0] si on remarque auparavant que A n’est pas trié! On arrête avant de faire l’invocation récursive… MODULE: A[N–2]  A[N–1] ? faux vrai N = 2 ? Trié  Faux vrai faux Trié  VérifieTrié(A, N-1) Trié  Vrai

16 Exemple 2 – Programme Java
Voir TableauTrier.java Examinez la traduction de l’algorithme au Java, exécutez et tester. Insérez des appels System.out.println pour tracer l’exécution de la méthode récursive.

17 Exercice #1 Écrivez un algorithme récursif pour vérifier si tous les caractères aux positions 0...N d’un tableau de caractères (A) sont des chiffres. Hypothèse: la taille de A est plus grande que N. Commencez avec le document Word Lab8Ex1.doc pour développez votre algorithme. Notez que l’algorithme Principal vous est fourni. Traduisez votre algorithme au Java Un programme partiel vous est fourni – VerifieChiffre.java.

18 Exercice #2 Écrivez un algorithme récursif pour créer un tableau contenant les valeurs de 0 à N-1. Commencez avec le document Word Lab8Ex2.doc pour développez votre algorithme. Notez que l’algorithme Principal vous est fourni. Traduisez votre algorithme au Java Un programme partiel vous est fourni – CreerTableau.java. Indice: Vous aurez parfois besoin de 2 algorithmes: Un premier algorithme pour faire une initialisation et démarrer la récursivité en invoquant le second algorithme Un second algorithme, qui lui est récursif et qui fait le gros du travail.

19 Exercice #3 – Algorithme d’Euclide
Le Plus Grand Commun Diviseur (PGCD) de deux nombres entiers est le plus grand entier qui divise les deux nombres avec un restant de 0. L’algorithme d’Euclid pour trouver le PGCD de x et y est: pgcd(x,y) est … y si x ≥ y et x mod y est 0 pgcd(y, x) si x < y pgcd(y, x mod y) autrement Si on assure que x ≥ y, alors l’algorithme devient pgcd(x, y) est … y si x mod y est 0 pgcd(y, x mod y) autrement

20 Exercice #3 – Algorithme d’Euclide
L’algorithme récursif pour notre logiciel devient: M  Max(x, y) (doit développer l’algorithme Max) N  x + y – M (donc, le minimum de x et y) Cas de base: M MOD N = 0  le résultat est N Cas récursif: Réduction: M  M MOD N Récursivité: ResPartiel  PGCD(N, M) Résultat: ResPartiel Question: est-ce que l’algorithme atteint toujours le cas de base: Notez que M MOD N est au plus N-1.

21 Exercice #3 - Algorithme d’Euclide
Écrivez un algorithme récursif pour trouver le Plus Grand Commun Diviseur (PGCD) de deux nombres x et y. Commencez avec le fichier Word Lab8Ex3.doc Notez que vous devez développez 2 algorithmes, un pour Max et un pour CalcPGCD Vous n’avez PAS à développer un algorithme principal. Traduisez vos algorithmes au Java Créez la class Euclide et traduisez les deux algorithmes à des méthodes Java Testez les méthodes avec l’onglet Interaction du Dr Java pour appeler la méthode calcPGCD. Euclide.calcPGCD(1234,4321) Euclide.calcPGCD(8192,192)


Télécharger ppt "ITI1520 Lab #8: Récursivité Gilbert Arbez, Mohamad Eid, Daniel Amyot, Sylvia Boyd, Diana Inkpen et Alan Williams."

Présentations similaires


Annonces Google