algorithmique (école d'ingénieur) · Chapitre 13 · Application directe du cours
Aller-retour sur un intervalle
Diviser pour régner · niveau 1 (application)
Énoncé
- Écrire une fonction récursive
void allerRetour(int i, int j)qui affiche les valeurs de dans l'ordre croissant puis dans l'ordre décroissant, avec un seul appel récursif. Par exempleallerRetour(0, 4)affiche0 1 2 3 3 2 1 0. Justifier la fonction par une base et une hérédité. - Écrire une fonction
void arcMoities(int i, int j)qui affiche dans l'ordre croissant en coupant l'intervalle en deux autour de son milieu . Quelle est la profondeur maximum des appels récursifs, comparée à celle de la fonctionarcdu cours ?
Corrigé
- Si est vide (), il n'y a rien à afficher. Sinon, l'aller-retour de est : , puis l'aller-retour de , puis de nouveau .
static void allerRetour(int i, int j) {
if (i == j) return; // [i:i] vide : affiché sans rien faire
System.out.print(i + " "); // (1) i, en tête de l'aller
allerRetour(i + 1, j); // (2) aller-retour de [i+1:j] affiché
System.out.print(i + " "); // (3) i, en fin de retour
} // (1)(2)(3) : aller-retour de [i:j] affiché
allerRetour(0,4) : 0 1 2 3 3 2 1 0
L'affichage avant l'appel récursif donne l'ordre croissant, celui qui suit l'appel donne l'ordre décroissant : les affichages « en remontant » se font dans l'ordre inverse des appels. -
static void arcMoities(int i, int j) {
if (j - i <= 0) return; // intervalle vide
int k = (i + j) / 2; // i <= k < j
arcMoities(i, k); // [i:k] affiché croissant
System.out.print(k + " "); // puis k
arcMoities(k + 1, j); // puis [k+1:j] : [i:j] affiché croissant
}
arcMoities(0,10) : 0 1 2 3 4 5 6 7 8 9 (profondeur max 4)
La fonction arc du cours retire une valeur par appel : sa profondeur est . Ici la taille est divisée par deux à chaque niveau : la profondeur est de l'ordre de (ici pour ). Les deux fonctions affichent les valeurs en , mais seule la seconde supporte sans dépassement de la pile d'appels.
100 % gratuit
La suite du chapitre est sur Adloun
- 10 autres exercices corrigés dans ce chapitre
- Les 2 QCM du chapitre, le premier sans compte
- Le tuteur, qui guide pas à pas sans donner la réponse
Sans compte : le cours et le premier QCM. Exercices et tuteur : inscription gratuite en 30 secondes, sans carte bancaire.