Exercice 1 - Récursivité · Bac Numérique et Sciences Informatiques Amérique du Nord 2024 (jour 2)

Thème : Récursivité · Tiré du sujet Jour 2 (2024)

Énoncé

EXERCICE 1 (6 points)

Cet exercice porte sur les algorithmes de tri et la programmation en Python.

On se propose dans cet exercice de se pencher sur un algorithme pour trier un tableau appelé le tri de Stooge.

Pour trier les éléments situés entre les indices i et j, où i < j, dans un tableau t par ce tri, on procède ainsi:

si les éléments d'indice i et j sont mal placés, on les échange;

si il y a au moins trois éléments entre les indices i et j on trie les deux premiers tiers du tableau avec cette méthode;

on trie les deux derniers tiers du tableau avec cette méthode;

on trie à nouveau les deux premiers tiers du tableau avec cette méthode.

Pour réaliser ce découpage en tiers, on considère l'entier k défini par l'expression

(j - i + 1) // 3,

et on considère les indices intermédiaires i+k et j-k.

Voici le code partiel de l'algorithme du tri de Stooge en Python qui trie donc les éléments d'un tableau par ordre croissant.

def triStooge(tab, i, j):

if tab[i] > tab[j]:

echange(tab, i, j)

if (j - i) > 1:

k = (j - i + 1)//3

triStooge(...)

triStooge(...)

triStooge(...)

1.

Écrire la fonction echange(tab, i, j) qui prend en arguments une liste Python tab et deux indices i, j, et réalise sur place l'échange des valeurs dans tab à ces indices. La fonction ne renvoie rien.

2.

Finaliser le programme précédent en complétant les lignes 6, 7 et 8 sur votre copie.

3.

Indiquer en le justifiant si cet algorithme est itératif ou récursif.

Soit l'appel triStooge(A, 0, 5) avec A = [5, 6, 4, 2, 3, 1].

4.

Déterminer la valeur numérique prise par k lors de ce premier appel. Une justification est attendue.

La figure ci-dessous présente l'arbre (incomplet) des appels récursifs effectués depuis l'appel triStooge(A, 0, 5).

Figure 1. Arbre des appels récursifs pour triStooge(A, 0, 5)

5.

Dénombrer le nombre d'appels récursifs effectués lors du tri sans compter l'appel initial.

6.

Déterminer les appels effectués dans les cases 1, 2 et 3 de cet arbre des appels récursifs.

7.

Dans cette question, A = [5, 4, 6, 2]. Recopier le tableau ci-dessous et le compléter (remplacer les ??).

Appel

Valeur de A avant l'appel

Valeur de A après l'appel

triStooge(A, 0, 3)

[5, 6, 4, 2]

[2, 6, 4, 5]

triStooge(A, 1, 3)

[2, 4, 6, 5]

[2, 4, 5, 6]

[2, 4, 5, 6]

Énoncé: Exercice 1 - Récursivité · Bac Numérique et Sciences Informatiques Amérique du Nord 2024 (jour 2)

Corrigé

Corrigé proposé par AprenAI (non officiel)

1. Écrire la fonction echange(tab, i, j)

Réponse : ```python def echange(tab, i, j): tab[i], tab[j] = tab[j], tab[i] ```

2. Compléter la ligne 6 de triStooge

Réponse : triStooge(tab, i, j - k)

2. Compléter la ligne 7 de triStooge

Réponse : triStooge(tab, i + k, j)

2. Compléter la ligne 8 de triStooge

Réponse : triStooge(tab, i, j - k)

3. Indiquer si cet algorithme est itératif ou récursif

Réponse : récursif

3. Justification

Réponse : La fonction triStooge contient des appels à elle-même avec des sous-tableaux de taille strictement inférieure.

4. Déterminer la valeur numérique prise par k lors de ce premier appel

Réponse : 2

4. Justification pour la valeur de k

Réponse : k = (5 - 0 + 1) // 3 = 6 // 3 = 2

5. Dénombrer le nombre d'appels récursifs effectués lors du tri sans compter l'appel initial

Réponse : 39

Les réponses des 8 questions restantes et l’explication pas à pas sont réservées aux membres Premium. Premium

Résous-le ici : correction automatique, indices et corrigé détaillé.

‹ Exercice 2 - Récursivité · Amérique du Nord 2025 (jour 1) · Exercice 3 - Récursivité · Amérique du Nord 2024 (jour 2) ›

Plus d’exercices de Récursivité