Suites#
Les fonctions, les boucles et les listes prennent ici un sens très concret : calculer plusieurs termes d’une suite, suivre leur évolution et conserver les valeurs obtenues.
Dès la première
Suite définie par une formule explicite#
Une formule explicite donne directement \(u_n\) en fonction de \(n\). Pour \(u_n=2n+3\), une fonction Python traduit la formule.
La boucle parcourt les rangs 0 à 5. Il s’agit donc des six premiers termes lorsque la suite commence
à \(u_0\). Décris maintenant l’algorithme en langage naturel, sans employer les mots def,
for ou print : quelles valeurs sont parcourues, quel calcul est effectué et quel résultat
est produit à chaque étape ?
Une autre suite peut être étudiée en changeant uniquement la formule.
Quelle suite est définie ? Ajoute le rang dans l’affichage sans modifier la fonction u.
Mise en pratique
Créer une fonction définissant
et afficher les six premiers termes. En Python, \((-1)^n\) s’écrit (-1)**n.
Suite définie par récurrence#
On considère :
Si l’on utilise seulement cette relation de récurrence, il faut calculer les termes dans l’ordre : chaque nouveau terme dépend du précédent.
L’ordre des deux lignes dans la boucle est essentiel : on affiche le terme actuel avant de calculer le suivant. Échange-les temporairement et explique le décalage observé.
Un rang décalé à corriger#
Pour la même suite, ce programme annonce u(0) = 5 alors que \(u_0=2\). Aucune erreur Python n’apparaît : c’est l’ordre des instructions qui pose problème.
Comment chercher ?
Suivre uniquement le premier passage : n vaut 0, mais u est modifié avant l’affichage. Il faut décider si la valeur associée au rang courant doit être affichée avant ou après le calcul du terme suivant.
Un deuxième exemple#
Pour la suite géométrique :
seule la formule de mise à jour change.
Le sixième terme peut être prévu avant l’exécution. Avec 0,5 à la place de 2, le comportement devient très différent.
Mise en pratique
On considère \(u_0=0{,}1\) et \(u_{n+1}=u_n^2+0{,}5\). Afficher les six premiers termes en respectant leur rang.
Mémoriser les termes#
Afficher une valeur ne permet pas de la réutiliser plus tard. Une liste peut conserver tous les termes calculés.
Pour une suite récurrente, on ajoute le terme actuel avant de calculer le suivant.
Les indices 0, 3 et −1 correspondent ici aux rangs 0, 3 et 5. Cette correspondance est vraie parce que la liste commence par \(u_0\) et ne saute aucun terme.
Mise en pratique
Avec une formule explicite. Créer une liste contenant les six premiers termes de \(u_n=3(n+2)^2\), puis afficher cette liste.
Avec une relation de récurrence. On considère \(u_0=1\) et \(u_{n+1}=-3u_n\). Stocker les six premiers termes dans une liste et l’afficher.
Besoin d’un indice ?
Crée d’abord une liste vide et initialise u avec \(u_0\). À chaque passage dans la
boucle, ajoute le terme actuel à la liste avant de calculer le suivant.
Additionner des termes#
Un accumulateur permet de calculer une somme sans conserver tous les termes. Pour \(u_n=2n+1\), le programme suivant calcule \(u_0+u_1+\cdots+u_{10}\).
Remplace 11 par 6 et vérifie le résultat à la main. Une liste serait utile pour garder les termes ; elle n’est pas nécessaire lorsque seule la somme finale est recherchée.
Mise en pratique
Calculer avec une boucle la somme des carrés des entiers de 1 à 20, puis la somme de leurs cubes. Afficher les deux résultats.
La suite de Fibonacci#
Ses deux premiers termes sont \(F_0=0\) et \(F_1=1\). À partir de là, chaque terme est la somme des deux précédents :
Pour calculer le terme suivant, il faut donc encore connaître les deux termes précédents. Deux variables peuvent les mémoriser ; après le calcul, elles doivent avancer d’un rang sans perdre trop tôt l’ancienne valeur.
Le tableau suivant montre ce déplacement. La troisième colonne est calculée avant de remplacer les deux premières valeurs.
étape |
terme précédent |
terme actuel |
terme suivant |
|---|---|---|---|
0 |
0 |
1 |
0 + 1 = 1 |
1 |
1 |
1 |
1 + 1 = 2 |
2 |
1 |
2 |
1 + 2 = 3 |
3 |
2 |
3 |
2 + 3 = 5 |
Mise en pratique
Écrire une fonction fibonacci(n) qui renvoie la liste des n premiers termes. On attend
par exemple [0, 1, 1, 2, 3, 5, 8] pour n = 7.
La suite de Syracuse#
On choisit un entier positif \(a\) et on pose \(u_0=a\). Pour calculer le terme suivant, deux règles sont possibles :
Avec \(u_0=6\), on obtient :
Dans cette activité, le programme s’arrête dès que 1 est atteint. Sans cet arrêt, les termes 1, 4, 2, 1 se répéteraient. La condition « pair » se teste avec le reste de la division par 2. Toutes les valeurs initiales testées jusqu’à présent finissent par atteindre 1, mais personne ne sait encore le démontrer pour tous les entiers positifs : c’est la conjecture de Syracuse.
Mise en pratique
Écrire une fonction syracuse(a) qui renvoie la liste des valeurs obtenues jusqu’au premier
1, valeur initiale et valeur finale comprises. Tester la fonction avec 6, puis avec 15.
Dans le parcours