Exercice 1 : Suite récurrente et point fixe
La suite est définie par et pour tout entier . On veut la calculer en Python.
def terme(n):
u = 2
for k in range(n):
u = 0.8*u + 3
return u- a) Calculez à la main , et , puis vérifiez que `terme(3)` renvoie la même valeur.
- b) Un élève place l'instruction `return u` À L'INTÉRIEUR de la boucle. Que renvoie alors `terme(3)` ?
- c) Que renvoie `terme(0)` ? Pourquoi ce cas est-il correct sans aucune ligne supplémentaire ?
- d) Le programme affiche des valeurs qui se rapprochent d'un nombre. Déterminez-le par le calcul.
Voir la correction
Réponses
- a) , ,
- b) : return interrompt la boucle
- c) : la boucle ne tourne pas
- d)
a) On applique la relation trois fois : , puis , puis . La boucle `for k in range(3)` effectue exactement trois mises à jour, donc `terme(3)` renvoie . La variable de boucle `k` ne sert à rien d'autre qu'à compter : c'est normal, la relation de récurrence ne dépend pas de .
b) Elle renvoie , c'est-à-dire . L'instruction `return` ne se contente pas de renvoyer une valeur, elle INTERROMPT immédiatement la fonction : dès la fin du premier tour, tout s'arrête. C'est l'erreur la plus fréquente sur ce type de programme, et elle est silencieuse, puisque est une valeur parfaitement plausible. Le `return` d'une fonction de calcul itératif se place toujours APRÈS la boucle, au même niveau d'indentation que le `for`.
c) Il renvoie , c'est-à-dire . La boucle `range(0)` est vide, donc aucune mise à jour n'a lieu et la fonction renvoie la valeur d'initialisation. Ce comportement est exactement celui que l'on veut, et il illustre un principe utile : une boucle qui tourne zéro fois n'est pas une erreur, c'est le cas de base traité gratuitement.
d) Si la suite converge vers un réel , alors en passant à la limite dans la relation on obtient , donc et . On le démontre proprement en posant : alors . La suite est donc GÉOMÉTRIQUE de raison et de premier terme , d'où . Comme , le terme tend vers et tend vers en croissant, sans jamais l'atteindre.
Le fil de la série commence ici : la boucle produit des NOMBRES, le calcul produit une FORMULE. On vérifie la formule sur les nombres, ici ✓, et c'est ensuite la formule qui permet de répondre à toutes les questions de limite et de seuil.
def terme(n):
u = 2
for k in range(n):
u = 0.8*u + 3
return u