Soit u la suite définie pour tout entier naturel n par u0 =1 et un+1 = 2 un + 1 |
La suite u est définie par une relation de récurrence
un+1 en fonction de un
Voici les 4 premiers termes de cette suite
u
0 = 1
u
1 = 2 u
0 + 1 = 2x1 + 1 = 3
u
2 = 2 u
1 + 1 = 2x3 + 1 = 7
u
3 = 2 u
2 + 1 = 2x7 + 1 = 15
Si on veut calculer u
10 , comme on ne connaît pas de relation fonctionnelle (c'est-à-dire u
n en fonction de n)
on est obligé de calculer "petit à petit" u
5 puis u
6 puis u
7 puis u
8 puis u
9 puis u
10
Cela est "un peu" long...
Imaginez si on demande u
1000
Pour calculer u
10 , il faut donc écrire ceci :
u ⟵ 1 (u prend la valeur 1) |
u ⟵ 2u + 1 (u prend la valeur 2x1 + 1 = 3)
u ⟵ 2u + 1 (u prend la valeur 2x3 + 1 = 7)
u ⟵ 2u + 1 (u prend la valeur 2x7 + 1 = 15)
u ⟵ 2u + 1 (u prend la valeur 2x15 + 1 = 31)
u ⟵ 2u + 1 (u prend la valeur 2x31 + 1 = 63)
u ⟵ 2u + 1 (u prend la valeur 2x63 + 1 = 127)
u ⟵ 2u + 1 (u prend la valeur 2x127 + 1 = 255)
u ⟵ 2u + 1 (u prend la valeur 2x255 + 1 = 511)
u ⟵ 2u + 1 (u prend la valeur 2x511 + 1 = 1023)
u ⟵ 2u + 1 (u prend la valeur 2x1023 + 1 = 2047)
|
On s'aperçoit qu'on répète 10 fois la même instruction !
Pour aller plus vite, on pourrait écrire
u ⟵ 1 |
répéter 10 fois
u ⟵ 2u + 1
|
Pour répéter plusieurs fois la même instruction, les langages de programmation utilisent une instruction répétitive
qu'on appelle
une boucle Pour
Une boucle Pour utilise
un compteur (ici une variable qu'on va appeler
k), qui est automatiquement augmenté de 1 (on dit
incrémenté)
après l'exécution de l'instruction à répéter (on dit
après chaque passage dans la boucle)
On pourrait faire la comparaison avec un coureur à pied qui doit boucler 10 tours de piste (en partant de la ligne de départ)
avec un compteur qui vaut 0 au départ et qui s'incrémente à chaque passage sur la ligne...
Lorsque le compteur passe à 10, la course est finie
Dans le fichier suivant, cliquer sur le bouton "Top Départ..."

(il peut arriver que le fichier bugue à cause d'internet, si le point "saute" la ligne d'arrivée

)
Voici donc notre algorithme, et sa traduction en Python
algorithme |
programme Python |
u ⟵ 1
Pour k allant de 0 à 9
u ⟵ 2u + 1
|
u = 1
for k in range(10) :
|
for k in range(10) veut dire que le compteur k prend successivement pour valeurs 0, 1, 2, 3, 4, 5, 6, 7, 8 et 9
La boucle s'arrête dès que le compteur vaut 10
La boucle est donc bien répétée 10 fois
for k in range(10) est la traduction Python de répéter 10 fois |
Nous pouvons alors écrire notre fonction qu'on va appeler
calcultermerécur
avec 1 entrée
n et 1 sortie
u
algorithme |
fonction Python |
définir calcultermerécur(n)
u ⟵ 1
Pour k allant de 0 à n-1
débutpour
u ⟵ 2u + 1
finpour
renvoyer u |
def calcultermerécur(n) :
|
En Python, il n'est pas nécessaire d'écrire début et fin
car on décale l'instruction à répéter
(ainsi, le "return" ne fait pas partie de la boucle)

Ecrire la fonction dans la fenêtre d'édition

exécuter cette fonction (bouton "run")

Ecrire dans la console : calcultermerécur(2)
le résultat 7 s'affiche

Ecrire dans la console : calcultermerécur(4)
le résultat 31 s'affiche

Ecrire dans la console : calcultermerécur(10)
le résultat 2047 s'affiche