Aller au contenu

Mathématiques (spécialité) · PremièreÉpreuve anticipée de mathématiques

Algorithmes sur les suites : cours de Première spécialité maths

Publié le 6 novembre 2026 · Mis à jour le 6 novembre 2026 · Signaler une erreur

L'essentiel

  • Une suite se programme avec une boucle for : on part de u0u_0 et on applique la relation de récurrence autant de fois que nécessaire (n passages pour atteindre unu_n).
  • Avec une formule explicite, pas de boucle : une seule ligne calcule directement unu_n ; la boucle sert quand la suite est donnée par récurrence.
  • Pour une liste des termes, on ajoute chaque valeur avec append ou on utilise une compréhension de liste ; pour une somme, on utilise un accumulateur initialisé à 0.
  • Pour un seuil, le nombre de passages n'est pas connu d'avance : on utilise une boucle while qui s'arrête dès que la condition est atteinte.
  • Un algorithme se teste à la main avec un tableau de suivi des variables, et on contrôle toujours le premier et le dernier tour (erreurs « décalées d'un cran »).

Pourquoi programmer des suites ?

Une suite, c'est une liste de nombres rangés dans un ordre précis : u0u_0, u1u_1, u2u_2, et ainsi de suite. En Première, tu en as étudié plusieurs modes de définition, et tu sais calculer à la main les premiers termes. Mais que faire si on te demande u200u_{200}, ou le premier terme qui dépasse un million ? À la main, c'est interminable. Un ordinateur, lui, répète une même opération des milliers de fois sans se fatiguer. C'est tout l'intérêt de ce chapitre : traduire une suite en programme Python.

Le programme de Première place d'ailleurs les suites parmi les grands thèmes où l'on modélise et où l'on représente des situations 1. Et les ressources académiques proposent de mettre en place les différents modes de génération d'une suite, avec un algorithme dès qu'il faut résoudre un problème de seuil 3. Tu vas donc retrouver ces idées tout au long du chapitre.

Un algorithme peut se présenter sous plusieurs formes : en phrases, sous forme graphique (un organigramme) 4, ou directement dans un langage de programmation. Dans ce cours, on écrit directement en Python, car c'est le langage que tu utilises au lycée. Au cycle 4, l'algorithmique avait déjà pour but de développer la pensée algorithmique et la résolution de problèmes, pas de former des experts 2 : tu n'as donc rien de nouveau à craindre, il s'agit surtout de bien organiser tes idées.

Les deux façons de définir une suite, et ce que cela change pour le programme

Avant de programmer, rappelons comment une suite peut être donnée. Cela décide du type de programme à écrire.

  • Par une formule explicite : un=f(n)u_n = f(n). Pour connaître u20u_{20}, on remplace nn par 2020.
  • Par une relation de récurrence : on donne le premier terme et une règle qui fait passer d'un terme au suivant, par exemple u0=3u_0 = 3 et un+1=2un+1u_{n+1} = 2u_n + 1. Pour connaître u20u_{20}, il faut en principe connaître u19u_{19}, qui lui-même demande u18u_{18}, etc.

Ces deux modes font partie de ceux que les ressources d'accompagnement invitent à faire manipuler aux élèves 3.

Choisir son algorithme sur une suiteCinq étapes : repérer le mode de définition, initialiser, choisir la boucle, mettre à jour, tester.1RepérerFormule explicite ou récurrence ?2InitialiserPremier terme, accumulateur, compteur n3Choisir la bouclefor si n connu, while pour un seuil4Mettre à jourTerme suivant, somme, compteur5TesterCas n = 0 et cas calculé à la main
  1. RepérerFormule explicite ou récurrence ?
  2. InitialiserPremier terme, accumulateur, compteur n
  3. Choisir la bouclefor si n connu, while pour un seuil
  4. Mettre à jourTerme suivant, somme, compteur
  5. TesterCas n = 0 et cas calculé à la main
Choisir son algorithme sur une suite · Démarche générale pour programmer une suite.

Calculer un terme avec une boucle for

C'est le cas le plus courant en récurrence. L'idée est de garder dans une variable u la valeur du terme « courant », puis de la remplacer par le terme suivant à chaque tour de boucle.

Le point qui déroute le plus : la ligne u = 2 * u + 1 n'est pas une équation. Le signe = de Python signifie « range dans la variable de gauche le résultat du calcul de droite ». Python calcule d'abord 2 * u + 1 avec l'ancienne valeur de u, puis range le résultat dans u. L'ancienne valeur disparaît : on ne conserve que le terme courant.

Tableau de suivi de terme(4)
Momentku
Avant la boucle—3
Tour 107
Tour 2115
Tour 3231
Tour 4363
Tableau de suivi de terme(4) · À la fin de la boucle, u contient u_4 = 63.

Ce tableau s'appelle un tableau de suivi (ou trace d'exécution). Il liste, tour après tour, la valeur de chaque variable. C'est l'outil qui permet de comprendre un programme sans l'exécuter, et il est très utile en contrôle : on te demandera souvent de « faire fonctionner l'algorithme à la main ».

Utiliser une formule explicite

Quand la suite est donnée par une formule explicite, aucune boucle n'est nécessaire : la fonction traduit simplement la formule.

Pour notre suite u0=3u_0 = 3, un+1=2un+1u_{n+1} = 2u_n + 1, on peut démontrer que un=4×2n−1u_n = 4 \times 2^n - 1. Vérifions : u0=4×1−1=3u_0 = 4 \times 1 - 1 = 3 et u4=4×16−1=63u_4 = 4 \times 16 - 1 = 63, ce qui correspond.

def terme_explicite(n):
    return 4 * 2 ** n - 1

En Python, la puissance s'écrit ** et non ^.

Démonstration · Pourquoi $u_n = 4 \times 2^n - 1$ ?

Ajoutons 11 aux deux membres de la relation : un+1+1=2un+2=2(un+1)u_{n+1} + 1 = 2u_n + 2 = 2(u_n + 1). La suite (un+1)(u_n + 1) est donc géométrique de raison 22 et de premier terme u0+1=4u_0 + 1 = 4. Ainsi un+1=4×2nu_n + 1 = 4 \times 2^n, d'où un=4×2n−1u_n = 4 \times 2^n - 1.

Construire la liste des termes

Pour tracer un nuage de points, repérer le sens de variation ou chercher un motif, on veut parfois tous les termes jusqu'à un rang donné. On les range alors dans une liste. Il y a deux façons de faire, que tu connais grâce aux listes en Python.

Calculer une somme de termes

Autre besoin classique : additionner les termes u0+u1+⋯+unu_0 + u_1 + \dots + u_n. On utilise un accumulateur, c'est-à-dire une variable qui part de 00 et à laquelle on ajoute chaque terme au fur et à mesure.

Pour la suite de notre exemple :

def somme(n):
    u = 3
    s = 3
    for k in range(n):
        u = 2 * u + 1
        s = s + u
    return s

Ici, s est initialisée avec u0=3u_0 = 3 parce que le premier terme fait partie de la somme et qu'il n'est pas ajouté dans la boucle. Pour n = 3, on trouve 3+7+15+31=563 + 7 + 15 + 31 = 56.

Chercher un seuil avec une boucle while

Jusqu'ici, on connaissait le nombre de tours à l'avance : c'était nn. Mais une question comme « à partir de quel rang la suite dépasse-t-elle 1 000 ? » ne donne pas ce nombre. Il faut s'arrêter dès que la condition est vérifiée. C'est le rôle de la boucle while (« tant que »).

Les ressources académiques mentionnent justement qu'un algorithme permet de résoudre ce type de problème de seuil 3, et elles le rencontrent aussi dans un contexte financier : déterminer le nombre de mensualités d'un prêt 3. Le chapitre suivant (méthode de seuil et de balayage) approfondira cette technique ; voici déjà le principe de base.

Tester, vérifier, utiliser un tableau de suivi

Un programme qui s'exécute sans message d'erreur n'est pas forcément un programme correct. Il peut calculer autre chose que ce qu'on voulait, comme une valeur décalée d'un rang. Avec des suites, trois contrôles suffisent la plupart du temps.

Les algorithmes sont puissants, mais ils exécutent exactement ce qu'on leur écrit, rien de plus. Ils sont d'ailleurs conçus par des personnes et ne sont pas neutres par nature : leurs choix de conception pèsent sur leurs résultats 4. À notre échelle, cela veut dire une chose très simple : c'est à toi de vérifier que le programme répond bien à la question posée.

Les erreurs fréquentes, à connaître avant l'épreuve

Exercices corrigés

Exercice 1 Calculer un terme par récurrence

★☆☆Environ 8 min

On considère la suite (un)(u_n) définie par u0=2u_0 = 2 et un+1=3un−1u_{n+1} = 3u_n - 1.

  1. Calcule à la main u1u_1, u2u_2 et u3u_3.
  2. Complète le programme pour qu'il renvoie unu_n :
def terme(n):
    u = ...
    for k in range(...):
        u = ...
    return u
  1. Quelle valeur renvoie terme(5) ?
Indice 1

Pour passer de u0u_0 à u5u_5, combien de fois applique-t-on la règle ?

Indice 2

Fais un tableau de suivi avec les colonnes k et u.

Voir la correction pas à pas
  1. Calcul à la main : u1=3×2−1=5u_1 = 3 \times 2 - 1 = 5, puis u2=3×5−1=14u_2 = 3 \times 5 - 1 = 14, puis u3=3×14−1=41u_3 = 3 \times 14 - 1 = 41.

  2. Initialisation : la variable u prend le premier terme, donc u = 2.

  3. Nombre de tours : on applique la règle nn fois pour aller de u0u_0 à unu_n, donc range(n).

  4. Instruction dans la boucle : u = 3 * u - 1.

  5. Calcul de u5u_5 en poursuivant : u4=3×41−1=122u_4 = 3 \times 41 - 1 = 122, puis u5=3×122−1=365u_5 = 3 \times 122 - 1 = 365.

terme(5) renvoie 365. Le programme complet est u = 2, range(n), u = 3 * u - 1.

Exercice 2 Somme de termes d'une suite arithmétique

★★☆Environ 10 min

Soit (vn)(v_n) la suite définie par v0=4v_0 = 4 et vn+1=vn+5v_{n+1} = v_n + 5.

v = 4
s = 0
for k in range(21):
    s = s + v
    v = v + 5
  1. Quels termes sont additionnés dans s à la fin de ce programme ?
  2. Donne la formule explicite de vnv_n.
  3. Quelle est la valeur finale de s ?
Indice 1

La boucle fait 21 passages et additionne la valeur courante avant de la modifier.

Indice 2

Une suite arithmétique de raison rr vérifie vn=v0+nrv_n = v_0 + nr.

Voir la correction pas à pas
  1. Le programme ajoute v à s puis calcule le terme suivant. Au premier tour, il ajoute v0v_0 ; au dernier (21e tour), il ajoute v20v_{20}. Donc s =v0+v1+⋯+v20= v_0 + v_1 + \dots + v_{20}, soit 21 termes.

  2. La suite est arithmétique de raison 55 : vn=4+5nv_n = 4 + 5n.

  3. Dernier terme additionné : v20=4+5×20=104v_{20} = 4 + 5 \times 20 = 104.

  4. Somme de termes consécutifs : S=21×(4+104)2=21×1082=1134S = \frac{21 \times (4 + 104)}{2} = \frac{21 \times 108}{2} = 1134.

  5. Contrôle : 21×4=8421 \times 4 = 84 et 5×(0+1+⋯+20)=5×210=10505 \times (0 + 1 + \dots + 20) = 5 \times 210 = 1050, d'où 84+1050=113484 + 1050 = 1134.

La valeur finale de s est 1134. Remarque que le dernier terme calculé dans v (v21=109v_{21} = 109) n'est jamais ajouté : c'est sans conséquence sur la somme.

Exercice 3 Trouver un seuil pour une suite géométrique

★★☆Environ 10 min

Une quantité vaut 500 au départ et double à chaque étape : w0=500w_0 = 500 et wn+1=2wnw_{n+1} = 2w_n.

  1. Écris une fonction rang_depasse(S) qui renvoie le plus petit entier nn tel que wn>Sw_n > S.
  2. Donne la valeur renvoyée pour S=100 000S = 100\,000.
Indice 1

Utilise une boucle while dont la condition est w <= S.

Indice 2

Le terme général est wn=500×2nw_n = 500 \times 2^n : cherche la plus petite puissance de 2 supérieure à 200200.

Voir la correction pas à pas
  1. Initialisation : n = 0 et w = 500.

  2. Boucle : while w <= S: puis w = 2 * w et n = n + 1. À la sortie, return n.

  3. Calcul à la main : on cherche 500×2n>100 000500 \times 2^n > 100\,000, soit 2n>2002^n > 200.

  4. Puissances de 2 : 27=1282^7 = 128 (trop petit) et 28=2562^8 = 256 (suffisant).

  5. Contrôle avec la suite : w7=500×128=64 000≤100 000w_7 = 500 \times 128 = 64\,000 \leq 100\,000 et w8=500×256=128 000>100 000w_8 = 500 \times 256 = 128\,000 > 100\,000.

La fonction renvoie 8 pour S=100 000S = 100\,000. Le rang trouvé est celui du premier terme qui dépasse le seuil.

Exercice 4 Les motifs de billes

★★★Environ 15 min

Dans un exemple de ressource académique, le premier motif en billes en demande 2, le deuxième 6, le troisième 12 et le quatrième 20 3. On admet que le motif numéro nn demande un=n(n+1)u_n = n(n+1) billes.

  1. Vérifie cette formule sur les quatre motifs donnés.
  2. Écris un programme qui renvoie le numéro du premier motif nécessitant strictement plus de 300 billes.
  3. Quel numéro obtient-on ?
Indice 1

La suite commence au rang 11 : initialise n = 1.

Indice 2

Teste les valeurs 16×1716 \times 17 et 17×1817 \times 18.

Voir la correction pas à pas
  1. Vérification : 1×2=21 \times 2 = 2, 2×3=62 \times 3 = 6, 3×4=123 \times 4 = 12, 4×5=204 \times 5 = 20. La formule correspond aux quatre motifs.

  2. Programme : n = 1, puis while n * (n + 1) <= 300: et n = n + 1 dans la boucle, puis print(n).

  3. À la main : 16×17=27216 \times 17 = 272, qui est inférieur à 300300, donc la boucle continue.

  4. Au tour suivant : 17×18=30617 \times 18 = 306, qui dépasse 300300, donc la boucle s'arrête avec n = 17.

  5. Contrôle algébrique : n(n+1)>300n(n+1) > 300 équivaut à n2+n−300>0n^2 + n - 300 > 0, dont la racine positive vaut environ 16,816{,}8, donc le plus petit entier convenable est 1717.

Le premier motif qui demande plus de 300 billes est le motif numéro 17 (306 billes).

Quiz

8 questions · correction immédiate · ton score reste sur ton appareil.

  1. On exécute :

    u = 3
    for k in range(3):
        u = 2 * u + 1
    

    Quelle est la valeur finale de u ?

  2. Pour calculer unu_n à partir de u0u_0 avec une relation de récurrence, la boucle for doit faire :

  3. Un algorithme est une suite finie d'instructions précises et sans ambiguïté, qui permet de résoudre toute une famille de problèmes.

  4. Que renvoie l'instruction [3 * k + 1 for k in range(4)] ?

  5. On veut trouver le premier rang nn pour lequel un>Su_n > S. Quelle structure choisir ?

  6. Une suite arithmétique est donnée par un=2nu_n = 2n. Quelle est la somme u0+u1+u2+u3+u4u_0 + u_1 + u_2 + u_3 + u_4 ?

  7. Quelles affirmations sont correctes ? (plusieurs réponses possibles)

    Plusieurs réponses possibles.

  8. Pour une suite définie par une formule explicite, il faut obligatoirement une boucle pour calculer u100u_{100}.

Les questions qu'on se pose

Pourquoi écrit-on range(n) et pas range(n+1) pour calculer u_n ?

Parce que la boucle part déjà de u0u_0, qui est donné par l'initialisation. Pour atteindre unu_n, il reste nn passages à faire. La confusion vient de l'idée qu'il y a « n+1n+1 termes » : c'est vrai pour la liste de u0u_0 à unu_n, mais pas pour le nombre d'opérations à effectuer. Le test de n = 0 est un bon réflexe : aucun passage ne doit avoir lieu.

Quelle différence entre for et while ?

Avec for, tu connais le nombre de tours avant de commencer (par exemple nn). Avec while, tu répètes tant qu'une condition est vraie, sans savoir combien de tours seront nécessaires, ce qui convient aux problèmes de seuil 3. Si tu hésites, demande-toi : « puis-je dire combien de fois je répète ? ».

Mon programme tourne sans s'arrêter, que faire ?

C'est presque toujours une boucle while dont la condition ne devient jamais fausse. Vérifie trois choses : la variable est bien mise à jour dans la boucle, la condition est dans le bon sens, et la suite atteint vraiment le seuil (une suite décroissante ne dépassera jamais un seuil élevé). Pour le tester, fais un tableau de suivi sur les trois ou quatre premiers tours.

Comment savoir si mon algorithme est correct ?

Teste le plus petit cas (n=0n = 0), compare avec des termes calculés à la main, et si possible avec une formule explicite ou une formule de somme. Un tableau de suivi permet aussi de « jouer le rôle de l'ordinateur ». Un programme qui ne produit pas d'erreur n'est pas pour autant juste : l'erreur la plus courante reste le décalage d'un rang.

Pourquoi ne pas utiliser toujours la formule explicite ?

Parce qu'elle n'existe pas toujours, ou qu'elle n'est pas connue : beaucoup de suites sont données seulement par récurrence. Quand les deux existent, on peut les comparer pour vérifier son travail. La boucle reste le moyen général ; la formule est un raccourci quand on la possède.

Sources

  1. Programmes et ressources en mathématiques — voie générale et technologique, Éduscol. Consulté le 6 novembre 2026.
  2. Algorithmique et programmation — Informer et accompagner, Éduscol. Consulté le 6 novembre 2026.
  3. Modéliser et Représenter — Ressource académique, Ressources Académiques. Consulté le 6 novembre 2026.
  4. Algorithme, Wikipédia. Consulté le 6 novembre 2026.
  5. Algorithme D*, Wikipédia. Consulté le 6 novembre 2026.

Les numéros dans le texte renvoient à ces sources. Une source qui ne dit pas ce qu'on lui fait dire ? Signale-le.

Signaler une erreur sur cette page

Je suis en…

Primaire

  • CP Bientôt
  • CE1 Bientôt
  • CE2 Bientôt
  • CM1 Bientôt
  • CM2 Bientôt

Collège

Lycée

Supérieur

  • BTS Bientôt
  • BUT Bientôt
  • Licence Bientôt
  • Prépas Bientôt

Sur cette page