PasseClasse

Cours de Informatique – Terminale

Ce chapitre étudie la récursivité : une fonction qui s'appelle elle-même avec un problème plus petit, avec un cas de base qui garantit l'arrêt. On écrit des fonctions récursives (factorielle, puissance, suite de Fibonacci, somme des chiffres, PGCD, dichotomie, tours de Hanoï), on suit la pile d'appels, on compare les coûts et on discute les limites de la récursivité. Tous les programmes ont été…

8 chapitres · exercices corrigés et quiz dans l'application

Continue sur PasseClasse

Crée ton compte gratuit : 2 premiers chapitres de chaque matière avec exercices corrigés, quiz et tuteur IA.

Commencer gratuitement

Programme : les chapitres

1. Algorithmique avancée : récursivité et dichotomie
Ce chapitre étudie la récursivité : une fonction qui s'appelle elle-même avec un problème plus petit, avec un cas de base qui garantit l'arrêt. On écrit des fonctions récursives…
2. Bases de données relationnelles : modélisation et SQL
Ce chapitre complète l'étude des bases de données : modélisation d'un problème (entités, associations, cardinalités), passage au schéma relationnel avec clés primaires et clés…
3. Python et fichiers : traitement de données CSV
Ce chapitre apprend à lire et à écrire des fichiers texte et des fichiers CSV avec Python (open, with, module csv), à convertir les données, à les stocker dans des listes de…
4. Pages web interactives : formulaires et JavaScript (initiation)
Ce chapitre rend les pages web interactives : formulaires HTML (champs, étiquettes, types, contraintes de saisie) et initiation à JavaScript (variables, types, fonctions,…
5. Réseaux, chiffrement et sécurité
Ce chapitre présente la sécurité des communications : objectifs (confidentialité, intégrité, authenticité, disponibilité), chiffrement symétrique (César, Vigenère, XOR) et…
6. Intelligence artificielle, numérique responsable et préparation au BAC
Ce chapitre présente l'intelligence artificielle : apprentissage automatique, données d'entraînement, classification par plus proche voisin (programme Python testé), mesure de la…
7. Programmation orientée objet en Python
Ce chapitre introduit la programmation orientée objet (POO) en Python : classes, objets, attributs et méthodes, constructeur __init__, encapsulation par convention, méthode…
8. Projet de développement : du cahier des charges au produit livré
Ce chapitre présente la conduite d'un petit projet informatique : expression du besoin et cahier des charges, découpage en tâches et en modules, répartition des rôles dans une…

Chapitre à lire gratuitement : Algorithmique avancée : récursivité et dichotomie

1. Le principe de la récursivité

Une fonction est récursive si elle s'appelle elle-même. Elle comporte toujours :

Exemple : n! = n × (n − 1)! avec 0! = 1.

def fact(n):

if n == 0:

return 1

return n * fact(n - 1)

fact(5) renvoie 120 ; fact(10) renvoie 3 628 800.

Déroulement : fact(3) = 3 × fact(2) = 3 × 2 × fact(1) = 3 × 2 × 1 × fact(0) = 6.

2. Pile d'appels et terminaison

Chaque appel est empilé en mémoire en attendant le résultat de l'appel suivant, puis les résultats remontent. Sans cas de base atteint, la récursion ne finit jamais et Python signale une erreur RecursionError (la limite par défaut est d'environ 1 000 appels imbriqués).

Terminaison : il faut une quantité entière positive qui diminue strictement à chaque appel (ici n).

3. Autres exemples

4. Puissance rapide

Version simple : puiss(a, n) = a × puiss(a, n − 1) : n appels.

Version rapide : si n est pair, a^n = (a^(n/2))^2 ; sinon a^n = a × a^(n−1). Le nombre d'appels est de l'ordre de log2(n). puiss_rapide(3, 13) renvoie 1 594 323 = 3^13.

5. Fibonacci : un piège

def fib(n):

if n < 2:

return n

return fib(n - 1) + fib(n - 2)

Les premiers termes sont 0, 1, 1, 2, 3, 5, 8, 13, 21, 34 et fib(20) = 6 765. Mais le coût explose : calculer fib(10) demande 177 appels et fib(20) en demande 21 891, car les mêmes valeurs sont recalculées. Solutions : une boucle, ou la mémoïsation (stocker les résultats déjà calculés dans un dictionnaire).

6. Dichotomie récursive

def dicho(L, v, g, d):

if g > d:

return -1

m = (g + d) // 2

if L[m] == v:

return m

if L[m] < v:

return dicho(L, v, m + 1, d)

return dicho(L, v, g, m - 1)

Avec T = [2, 5, 8, 12, 16, 23, 38, 56, 72, 91] : dicho(T, 23, 0, 9) renvoie 5 et dicho(T, 7, 0, 9) renvoie −1. Le problème est divisé par deux à chaque appel : environ log2(n) appels (10 pour n = 1 000 ; 20 pour un million).

« Diviser pour régner » : on découpe le problème en sous-problèmes plus petits.

7. Les tours de Hanoï

Pour déplacer n disques de A vers C en utilisant B : déplacer n − 1 disques de A vers B, déplacer le plus grand de A vers C, puis déplacer les n − 1 disques de B vers C. Le nombre de déplacements est 2^n − 1 : 7 pour n = 3, 1 023 pour n = 10, 1 048 575 pour n = 20.

Pour n = 3, les déplacements sont : A→C, A→B, C→B, A→C, B→A, B→C, A→C.

8. Retenir l'essentiel

Continue sur PasseClasse

Crée ton compte gratuit : 2 premiers chapitres de chaque matière avec exercices corrigés, quiz et tuteur IA.

Commencer gratuitement