Adloun

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 exemple allerRetour(0, 4) affiche 0 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 fonction arc du 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

Exercice suivant et tuteur

Sans compte : le cours et le premier QCM. Exercices et tuteur : inscription gratuite en 30 secondes, sans carte bancaire.

Le cours du chapitre · Tous les exercices du chapitre

Exercice suivant et tuteur →