Module 05 · Leçon 2
Applications classiques des suites récurrentes
Ce que vous saurez faire
- Calculer les termes d'une suite arithmétique
- Calculer les termes d'une suite géométrique
- Implémenter Fibonacci itératif
Avant de commencer
Une suite récurrente peut modéliser des situations concrètes : intérêts composés, population qui croît, fractale, motif de croissance. Voyons trois cas classiques.
1. Suite arithmétique
U(n) = U(n−1) + r, raison r constante.
FUNCTION TermeArith(a, r, n : integer) : integer;
VAR i, res : integer;
BEGIN
res := a;
FOR i := 1 TO n DO
res := res + r;
TermeArith := res;
END;
Formule fermée : U(n) = a + n × r (plus rapide, en O(1)).
Somme des n premiers termes
S(n) = (n+1) × (a + U(n)) / 2 (formule de la somme arithmétique).
2. Suite géométrique
U(n) = U(n−1) × q, raison q constante.
FUNCTION TermeGeo(a, q, n : integer) : real;
VAR
i : integer;
res : real;
BEGIN
res := a;
FOR i := 1 TO n DO
res := res * q;
TermeGeo := res;
END;
Formule fermée : U(n) = a × q^n.
Exemple : intérêts composés
Un placement de 1000 DT à 5% par an : combien après 10 ans ?
U(10) = 1000 × 1.05^10 ≈ 1628.89 DT.
3. Fibonacci : un cas particulier (ordre 2)
F(n) = F(n−1) + F(n−2) avec F(0) = 0, F(1) = 1.
Termes : 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, …
FUNCTION Fibo(n : integer) : integer;
VAR
i, a, b, c : integer;
BEGIN
IF n < 2 THEN
Fibo := n
ELSE
BEGIN
a := 0; b := 1;
FOR i := 2 TO n DO
BEGIN
c := a + b;
a := b;
b := c;
END;
Fibo := b;
END;
END;
4. Trace : Fibonacci(6)
| N° | Instruction | i | a | b | c |
|---|---|---|---|---|---|
| 01 | ··· | ? | ? | ? | ? |
| 02 | ··· | ? | ? | ? | ? |
| 03 | ··· | ? | ? | ? | ? |
| 04 | ··· | ? | ? | ? | ? |
| 05 | ··· | ? | ? | ? | ? |
| 06 | ··· | ? | ? | ? | ? |
5. Exercices
Écrire une fonction Doubler(n) qui calcule 2^n itérativement.
Voir le corrigé
FUNCTION Doubler(n : integer) : integer;
VAR i, res : integer;
BEGIN
res := 1;
FOR i := 1 TO n DO
res := res * 2;
Doubler := res;
END;
Une population de bactéries double chaque heure. Au temps t = 0,
on a N₀ = 100 bactéries. Écrire un programme qui demande t (en heures)
et affiche la population à cet instant. Tester pour t = 0, 5, 10.
Voir le corrigé
PROGRAM Bacteries;
VAR
N0, t, i : integer;
N : integer;
BEGIN
N0 := 100;
Write('Temps t (heures) : ');
Readln(t);
N := N0;
FOR i := 1 TO t DO
N := N * 2;
Writeln('Population à t=', t, ' : ', N);
END.
t=0 → 100, t=5 → 3200, t=10 → 102400.
Soit U(n) définie par :
U(0) = 1U(n) = U(n−1) / 2siU(n−1)est pairU(n) = 3 × U(n−1) + 1sinon (suite de Syracuse)
Écrire un programme qui affiche les termes jusqu'à atteindre 1 (ou
afficher 1000 termes max). Cas test : U(0) = 6.
Voir le corrigé
PROGRAM Syracuse;
VAR
u, i : integer;
BEGIN
Write('U(0) = ');
Readln(u);
i := 0;
WHILE (u <> 1) AND (i < 1000) DO
BEGIN
Writeln('U(', i, ') = ', u);
IF u MOD 2 = 0 THEN
u := u DIV 2
ELSE
u := 3 * u + 1;
i := i + 1;
END;
Writeln('U(', i, ') = ', u);
END.
Pour U(0)=6 : 6, 3, 10, 5, 16, 8, 4, 2, 1. (Conjecture de Syracuse :
on atteint toujours 1, mais ce n'est pas prouvé en général.)
6. Erreurs fréquentes au bac
- Mauvaise initialisation pour Fibonacci :
a := 1, b := 1donne la suite à partir de F(1), pas F(0). - Confondre l'ordre des affectations dans la mise à jour
(
a := bdoit venir après le calcul dec). - Utiliser
integerpour des suites à croissance exponentielle — dépassement de capacité àn ≈ 30pour Fibo.
7. Quiz
Quiz (5 questions)
F(10) (Fibonacci avec F(0)=0, F(1)=1) vaut :
Pour Fibonacci itératif, combien d'appels de fonction pour calculer F(n) ?
Pourquoi la version récursive naïve de Fibonacci est-elle lente ?
Une suite arithmétique de raison r=3 et U(0)=2 donne :
Une suite géométrique de raison q=2 et U(0)=3 donne :