On considère la suite définie par u0 = 2 et un+1 = 3un − 1. a) Écrire une fonction Python terme(n) qui renvoie un. b) Que renvoie terme(3) ? Justifier par un déroulement de la boucle.
Voir la correction
a) On part de u = 2, la valeur de u0, et l'on applique n fois la relation de récurrence :
def terme(n):
u = 2
for k in range(n):
u = 3 * u - 1
return uL'invariant de boucle est : après k passages dans la boucle, u vaut uk. Comme range(n) provoque exactement n passages, la fonction renvoie un.
b) Déroulement de terme(3) : au départ u = 2 ; premier passage, u = 3 * 2 - 1 = 5 ; deuxième passage, u = 3 * 5 - 1 = 14 ; troisième passage, u = 3 * 14 - 1 = 41. La fonction renvoie 41 = u3, ce qui correspond aux termes calculés au chapitre sur les suites.
Erreur fréquente : écrire range(n + 1), qui ferait un passage de trop et renverrait un+1. Tester la fonction sur terme(0), qui doit renvoyer 2, et sur terme(1), qui doit renvoyer 5, permet de le détecter.