NSI · Terminale
Exercices, QCM et annales officielles du Bac NSI
Fiche d'exercices d'entraînement, TP sur machine, cas de base, pile d'appels, comparaisons temporelles et annales officielles du Bac NSI.
Fiche d'exercices & TP sur Machine
Terminale NSI — Python 3
Ce chapitre regroupe la fiche d'exercices d'entraînement, le TP sur machine (analyse de pile et comparaisons temporelles), les annales officielles du Bac NSI et les QCM interactifs.
1. Fiche d'Exercices d'Entraînement
Exercice 1 — Identifier cas de base et cas récursif
Pour chacune des fonctions du cours (factorielle, recherche_dichotomique, est_palindrome, fibonacci), identifier précisément le(s) cas de base et le(s) cas récursif.
Exercice 2 — Puissance récursive
Écrire une fonction récursive puissance(base, exposant) qui calcule base ** exposant (avec exposant un entier naturel), sans utiliser l'opérateur **.
Exercice 3 — Somme des chiffres
Écrire une fonction récursive somme_chiffres(n) qui renvoie la somme des chiffres d'un entier naturel n (par exemple somme_chiffres(1234) doit renvoyer 10).
Indication : le dernier chiffre de n est n % 10, et le reste est n // 10.
Exercice 4 — Inverser une chaîne
Écrire une fonction récursive inverser(chaine) qui renvoie la chaîne inversée, sans utiliser chaine[::-1] ni aucune boucle.
Exercice 5 — PGCD (algorithme d'Euclide)
Écrire une fonction récursive pgcd(a, b) qui calcule le plus grand commun diviseur de deux entiers naturels, en utilisant la propriété : pgcd(a, b) = pgcd(b, a % b), avec pgcd(a, 0) = a.
Exercice 6 — Trace d'exécution
On donne :
- Sans exécuter le code, donner la valeur de
mystere(4). - Combien d'appels récursifs sont effectués au total pour calculer
mystere(4)(cas de base inclus) ?
Exercice 7 — Terminaison
Pour chacune des fonctions suivantes, dire si elle termine toujours, et si oui, donner un variant qui le justifie ; sinon, expliquer pourquoi elle ne termine pas.
Exercice 8 — Récursivité vs itération
- Écrire une version itérative de
puissance(exercice 2), avec une bouclefor. - Pour
puissance(2, 100000), laquelle des deux versions (récursive ou itérative) risque de provoquer une erreur en Python ? Pourquoi ?
2. TP sur Machine — Explorer, Tracer, Comparer
Terminale NSI — Python 3 — Durée indicative : 1h30
Objectifs du TP
- Écrire plusieurs fonctions récursives sur des types de données variés.
- Observer concrètement la pile d'appels et ses limites.
- Comparer expérimentalement le coût d'une version récursive et d'une version itérative.
Partie A — Récursivité sur les nombres et les chaînes
A.1. Écrire une fonction récursive est_croissante(tableau) qui renvoie True si les éléments d'un tableau (liste Python) sont rangés par ordre croissant, False sinon.
Indication : le cas de base peut être un tableau de longueur 0 ou 1 ; le cas récursif compare les deux premiers éléments puis se ramène au reste du tableau.
A.2. Écrire une fonction récursive compte_occurrences(chaine, caractere) qui compte le nombre d'occurrences d'un caractère dans une chaîne.
A.3. Écrire une fonction récursive est_trie_partiellement (bonus) qui vérifie qu'un tableau est trié en ignorant la casse pour des chaînes de caractères.
Partie B — Observer la pile d'appels
B.1. Ajouter des print de trace à la fonction factorielle du cours, pour afficher, à chaque appel, sa profondeur (nombre d'appels imbriqués) et la valeur de n :
Exécuter factorielle_tracee(5) et observer l'affichage : identifier la phase de descente et la phase de remontée.
B.2. Chercher la profondeur de récursion maximale autorisée par défaut avec sys.getrecursionlimit(). Écrire une fonction qui provoque volontairement une RecursionError, et capturer cette erreur avec un try/except pour afficher un message clair plutôt que de laisser planter le programme.
Partie C — Comparer récursif et itératif
C.1. Écrire une version itérative fibonacci_iteratif(n) de la suite de Fibonacci, en coût linéaire (une seule boucle, sans recalculs redondants).
C.2. À l'aide du module time, comparer les temps d'exécution de fibonacci (récursif naïf, vu en cours) et fibonacci_iteratif pour n = 28. Que constatez-vous ?
C.3. Expliquer, en une phrase, pourquoi la différence est si importante entre les deux versions, en reliant votre réponse au nombre d'appels effectués par la version récursive naïve.
3. Sujets d'Annales Officielles du Baccalauréat NSI
Pour vous entraîner dans les conditions réelles des épreuves écrites du Baccalauréat NSI, voici les sujets officiels portant sur la récursivité :
- Sujet 1 (2021) — Sujet 1 2021 Exercice 2 : Analyse de fonctions récursives sur les chaînes de caractères et calcul de puissances.
- Sujet 5 (2021) — Sujet 5 2021 Exercice 4 : Parcours récursif d'un arbre binaire et calcul de la hauteur.
- Sujet 1 (2022) — Sujet 1 2022 Exercice 1 : Recherche dichotomique récursive dans un tableau trié.
- Sujet 7 (2022) — Sujet 7 2022 Exercice 1 : Conversion décimal-binaire récursive et tracé de figures fractales (Flocon de Koch).
4. QCM d'Évaluation Finale
Rôle du cas de base
Quelle est la conséquence directe de l'absence de cas de base dans une fonction récursive ?
Preuve de terminaison
Pour prouver qu'une fonction récursive se termine, que doit-on obligatoirement définir ?
Pile d'appels (Call Stack)
Lorsque la fonction fctA appelle la fonction fctB, comment réagit la pile d'exécution ?
Complexité de la suite de Fibonacci naïve
Quelle est la complexité temporelle de la fonction récursive naïve fibonacci(n) = fib(n-1) + fib(n-2) ?
5. Simulateur Interactif en Ligne
Expérimentation Interactive
Vous pouvez visualiser pas à pas l'empilement et le dépilement de la pile d'appels (factorielle, fibonacci, pgcd, puissances) et explorer l'arbre d'exécution dynamique sur notre simulateur :
Accéder au Simulateur de Récursivité (Pile d'Appels & Arbre)→
Avez-vous compris et assimilé ce cours ?
+50 XPÉtudiez le contenu activement pendant au moins 45 secondes pour pouvoir débloquer la validation au mérite.
