Médaille
N°1 pour apprendre & réviser du collège au lycée.
Calcul des termes d'une suite définie par récurrence - Python
Découvrez, sur SchoolMouv, des milliers de contenus pédagogiques, du CP à la Terminale, rédigés par des enseignants de l’Éducation nationale.
Les élèves de troisième, de première ou de terminale bénéficient, en plus, de contenus spécifiques pour réviser efficacement leur brevet des collèges, leur bac de français ou leur baccalauréat édition 2023.
Fiche méthode

Introduction :

Dans cette fiche, nous allons voir comment programmer un algorithme Python qui calculera les termes d’une suite définie par une relation de récurrence.

Prérequis

Nous considérons trois suites définies sur N\mathbb N par une relation de récurrence :

  • (an)(a_n), définie pour tout entier naturel nn par :

{a0=2an+1=0,8an+5\begin{cases} a0=2 \ a{n+1}=0,8a_n+5 \end{cases}

  • (bn)(b_n), définie pour tout entier naturel nn par :

{b0=1bn+1=1,5bn2\begin{cases} b0=1 \ b{n+1}=1,5b_n-2 \end{cases}

  • (cn)(c_n) , définie pour tout entier naturel nn par :

{c0=50cn+1=0,7cn+3\begin{cases} c0=50 \ c{n+1}=0,7c_n+3 \end{cases}

Nous savons que les termes de ces suites se calculent à partir de leurs termes précédents.

  • Nous allons donc programmer une fonction Python qui permettra de calculer, de terme en terme, le terme d’un rang donné.

Algorithme Python

Définition des fonctions

Soit les fonctions g1g1, g2g2 et g3g_3 respectivement définies sur R\mathbb R par :

g1(x)=0,8x+5g2(x)=1,5x2g3(x)=0,7x+3\begin{aligned} g1(x)&=0,8x+5 \ g2(x)&=1,5x-2 \ g_3(x)&=0,7x+3 \end{aligned}

Nous avons ainsi, pour tout entier naturel nn :

an+1=g1(an)bn+1=g2(bn)cn+1=g3(cn)\begin{aligned} a{n+1}&=g1(an) \ b{n+1}&=g2(bn) \ c{n+1}&=g3(c_n) \end{aligned}

  • Nous commençons donc par programmer ces trois fonctions :

1def g1(a):2return 0.8  a + 534def g2(b):5return 1.5  b - 267def g3(c):8return 0.7  c + 3\begin{aligned} \textcolor{#A9A9A9}{\text{1}}&\quad\text{def g1(a):} \ \textcolor{#A9A9A9}{\text{2}}&\quad\qquad\text{return 0.8 $\ast$ a + 5} \ \textcolor{#A9A9A9}{\text{3}}& \ \textcolor{#A9A9A9}{\text{4}}&\quad\text{def g2(b):} \ \textcolor{#A9A9A9}{\text{5}}&\quad\qquad \text{return 1.5 $\ast$ b - 2} \ \textcolor{#A9A9A9}{\text{6}}& \ \textcolor{#A9A9A9}{\text{7}}&\quad\text{def g3(c):} \ \textcolor{#A9A9A9}{\text{8}}&\quad\qquad \text{return 0.7 $\ast$ c + 3} \ \end{aligned}

Remarque : Nous utilisons comme paramètres de ces fonctions a\purple{\text{a}}, b\purple{\text{b}} et c\purple{\text{c}} pour mettre en évidence leurs liens avec les suites définies plus haut.

  • Toutefois, on peut évidemment utiliser le même paramètre (x\purple{\text{x}} par exemple) pour les trois fonctions.

Fonction Python principale

  • Nous définissons la fonction terme\purple{\text{terme}} et, afin qu’elle soit la plus générale possible, nous souhaitons qu’elle prenne en paramètres :
  • la valeur du premier terme u0\purple{\text{u\textunderscore 0}}0 ;
  • la fonction f\purple{\text{f}} qui donne le terme de rang n+1n+1 en fonction du terme de rang nn (g1g1, g2g2 ou g3g_3 dans notre cas) ;
  • le rang p\purple{\text{p}} du terme que nous souhaitons connaître.
  • def terme(u0, f, p):\text{def terme(u\textunderscore 0, f, p):}0, f, p):
    • Nous initialisons la variable u\purple{\text{u}} avec la valeur u0\purple{\text{u\textunderscore 0}}0 indiquée en paramètre (cette variable contiendra successivement les valeurs des termes de la suite) :

      u = u0\text{u = u\textunderscore 0}0
      • Puis nous calculons successivement les termes de la suite, jusqu’au rang p\purple{\text{p}} donné en paramètre :

      for i in range(1, p + 1):\text{for i in range(1, p + 1):}
      • Pour calculer ces termes successifs, nous nous servons de la fonction f\purple{\text{f}} donnée en paramètre :

      u = f(u)\text{u = f(u)}
      • Une fois la boucle for\purple{\text{for}} exécutée, u\purple{\text{u}} contient la valeur du terme de rang p\purple{\text{p}} de la suite.
      • Nous l’affichons, donc :

      print(Terme de rang {} : {}.format(p, u))\text{print($^{\backprime\backprime}$Terme de rang $\lbrace\rbrace$ : $\lbrace\rbrace^{\prime\prime}$.format(p, u))}
      bannière astuce

      Astuce

      Nous utilisons ici un formatage pratique et qui simplifie un peu l’écriture : print( texte {} texte {} texte.format(x, y))\purple{\text{print($^{\backprime\backprime}$ texte $\lbrace\rbrace$ texte $\lbrace\rbrace$ texte$^{\prime\prime}$.format(x, y))}} remplacera, dans l’ordre, les accolades par les valeurs des variables x\purple{\text{x}} et y\purple{\text{y}}.

      Programme complet

      bannière à retenir

      À retenir

      1def g1(a):2return 0.8  a + 534def g2(b):5return 1.5  b - 267def g3(c):8return 0.7  c + 3910def terme(u0, f, p):11¨C11Cu = u012¨C12C¨C13Cfor i in range(1, p + 1):13¨C14C¨C15C¨C16Cu = f(u)14¨C17C¨C18Cprint(Terme de rang {} : {}.format(p, u))\begin{aligned} \textcolor{#A9A9A9}{\text{1}}&\quad\text{def g1(a):} \ \textcolor{#A9A9A9}{\text{2}}&\quad\qquad\text{return 0.8 $\ast$ a + 5} \ \textcolor{#A9A9A9}{\text{3}}& \ \textcolor{#A9A9A9}{\text{4}}&\quad\text{def g2(b):} \ \textcolor{#A9A9A9}{\text{5}}&\quad\qquad \text{return 1.5 $\ast$ b - 2} \ \textcolor{#A9A9A9}{\text{6}}& \ \textcolor{#A9A9A9}{\text{7}}&\quad\text{def g3(c):} \ \textcolor{#A9A9A9}{\text{8}}&\quad\qquad \text{return 0.7 $\ast$ c + 3} \ \textcolor{#A9A9A9}{\text{9}}& \ \textcolor{#A9A9A9}{\text{10}}&\quad\text{def terme(u\textunderscore 0, f, p):} \ \textcolor{#A9A9A9}{\text{11}}&\quad\qquad \text{u = u\textunderscore 0} \ \textcolor{#A9A9A9}{\text{12}}&\quad\qquad \text{for i in range(1, p + 1):} \ \textcolor{#A9A9A9}{\text{13}}&\quad\qquad\qquad \text{u = f(u)} \ \textcolor{#A9A9A9}{\text{14}}&\quad\qquad \text{print($^{\backprime\backprime}$Terme de rang $\lbrace\rbrace$ : $\lbrace\rbrace^{\prime\prime}$.format(p, u))} \end{aligned}
      bannière exemple

      Exemple

      • Si nous souhaitons connaître le terme de rang 3535 de la suite (an)(a_n), nous entrons la commande :

      terme(2, g1, 35)\purple{\text{terme(2, g1, 35)}}

      • Si nous souhaitons connaître le terme de rang 1515 de la suite (bn)(b_n), nous entrons la commande :

      terme(1, g2, 15)\purple{\text{terme(1, g2, 15)}}

      • Si nous souhaitons connaître le terme de rang 3535 de la suite (an)(a_n), nous entrons la commande :

      terme(50, g3, 17)\purple{\text{terme(50, g3, 17)}}

      • Vous pouvez bien sûr travailler avec une autre suite : il suffira de la définir avec la fonction Python correspondante, puis de faire appel à terme\purple{\text{terme}}, qui peut être utilisée telle, avec les paramètres adéquats.

      Liste des termes

      Nous ajoutons une fonction listetermes\purple{\text{liste\textunderscore termes}}termes, proche de terme\purple{\text{terme}}, mais qui, au lieu de donner le terme de rang p\purple{\text{p}}, listera les termes de rangs 00 à p\purple{\text{p}}.

      • Une erreur a été volontairement glissée dans le code ci-dessous. Identifiez-la.

      \begin{aligned} \textcolor{#A9A9A9}{\text{16}}&\quad \text{def liste\textunderscore termes(u\textunderscore 0, f, p):} \\ \textcolor{#A9A9A9}{\text{17}}&\quad\qquad \text{u = u\textunderscore 0} \\ \textcolor{#A9A9A9}{\text{18}}&\quad\qquad \text{print($^{\backprime\backprime}$Terme de rang 0 : $^{\prime\prime}$, u)} \\ \textcolor{#A9A9A9}{\text{19}}&\quad\qquad \text{for i in range(1, p + 1):} \\ \textcolor{#A9A9A9}{\text{20}}&\quad\qquad\qquad \text{u = f(u)} \\ \textcolor{#A9A9A9}{\text{21}}&\quad\qquad \text{print($^{\backprime\backprime}$Terme de rang $\lbrace\rbrace$ : $\lbrace\rbrace^{\prime\prime}$.format(i, u))} \end{aligned}

      Après avoir corrigé l’erreur, utilisez la fonction avec les suites (an)(an), (bn)(bn) et (cn)(c_n) définies plus haut.

      • Que pouvez-vous conjecturer sur leurs limites ?