Que renvoie la fonction suivante pour n = 5 ? Justifier en donnant les valeurs successives de r.
def mystere(n):
r = 1
for k in range(n):
r = 2*r
return rVoir la correction
range(5) produit les cinq valeurs 0, 1, 2, 3, 4 : le corps de la boucle est exécuté cinq fois, quelle que soit la valeur de k, qui ne sert qu'à compter.
À chaque passage, r est doublé : au départ r = 1, puis 2, 4, 8, 16 et enfin 32.
La fonction renvoie 32, c'est-à-dire 25 : après n passages, r vaut 2n (c'est l'invariant de boucle). mystere(0) renverrait 1 = 20, la boucle n'étant pas exécutée.
Un tableau de trace (colonne k, colonne r) est la méthode la plus sûre pour lire un tel programme ; ici il tient en une ligne par passage.