Vous êtes sur la page 1sur 56

Correction et Terminaison d’un algorithme

Mehdi Mekkaoui

CPGE Tanger
Lycee Moulay Al Hassan
cpge.mekkaoui@gmail.com

19 décembre 2023
Introduction et problématique Rappel Récurrence Correction Terminaison

Introduction

la définition d’un algorithme consiste à passer par des normes , pour garantir
que ce programme fonctionne correctement et facilement , ces normes sont
décrites par trois axes d’études :
la terminaison

1/27

Correction et Terminaison d’un algorithme


Introduction et problématique Rappel Récurrence Correction Terminaison

Introduction

la définition d’un algorithme consiste à passer par des normes , pour garantir
que ce programme fonctionne correctement et facilement , ces normes sont
décrites par trois axes d’études :
la terminaison
la correction

1/27

Correction et Terminaison d’un algorithme


Introduction et problématique Rappel Récurrence Correction Terminaison

Introduction

la définition d’un algorithme consiste à passer par des normes , pour garantir
que ce programme fonctionne correctement et facilement , ces normes sont
décrites par trois axes d’études :
la terminaison
la correction
complexité ( à voir dans la deuxième année )

1/27

Correction et Terminaison d’un algorithme


Introduction et problématique Rappel Récurrence Correction Terminaison

Pour les deux premières normes (notre cours) , on peut bien voir leurs utilité
( rôle ) , en essayant de répondre sur les questions :
est ce que ce programme termine ?

2/27

Correction et Terminaison d’un algorithme


Introduction et problématique Rappel Récurrence Correction Terminaison

Pour les deux premières normes (notre cours) , on peut bien voir leurs utilité
( rôle ) , en essayant de répondre sur les questions :
est ce que ce programme termine ?
ce programme rend t-il le résultat correct ?

2/27

Correction et Terminaison d’un algorithme


Introduction et problématique Rappel Récurrence Correction Terminaison

Pour les deux premières normes (notre cours) , on peut bien voir leurs utilité
( rôle ) , en essayant de répondre sur les questions :
est ce que ce programme termine ?
ce programme rend t-il le résultat correct ?
Donc ceci est un outil logique pour pouvoir prouver que votre
programme rend bien le résultat attendus

2/27

Correction et Terminaison d’un algorithme


Introduction et problématique Rappel Récurrence Correction Terminaison

Induction / récurrence

Dans les mathématique on utilise des outils de démonstration logiques , a


savoir :
équivalence

3/27

Correction et Terminaison d’un algorithme


Introduction et problématique Rappel Récurrence Correction Terminaison

Induction / récurrence

Dans les mathématique on utilise des outils de démonstration logiques , a


savoir :
équivalence
contrapose

3/27

Correction et Terminaison d’un algorithme


Introduction et problématique Rappel Récurrence Correction Terminaison

Induction / récurrence

Dans les mathématique on utilise des outils de démonstration logiques , a


savoir :
équivalence
contrapose
Absurde

3/27

Correction et Terminaison d’un algorithme


Introduction et problématique Rappel Récurrence Correction Terminaison

Induction / récurrence

Dans les mathématique on utilise des outils de démonstration logiques , a


savoir :
équivalence
contrapose
Absurde
Récurrence (Induction)

3/27

Correction et Terminaison d’un algorithme


Introduction et problématique Rappel Récurrence Correction Terminaison

Induction / récurrence

Dans les mathématique on utilise des outils de démonstration logiques , a


savoir :
équivalence
contrapose
Absurde
Récurrence (Induction)
ect

3/27

Correction et Terminaison d’un algorithme


Introduction et problématique Rappel Récurrence Correction Terminaison

Induction / récurrence

Dans les mathématique on utilise des outils de démonstration logiques , a


savoir :
équivalence
contrapose
Absurde
Récurrence (Induction)
ect
Mais puisque nos programmes ( algorithmes ) consiste que des
condition ( déjà terminable ) et des boucles .
Donc reste a montrer le résultat pour cette structure , pour cela on se
trouve dans un cas similaire au cas mathématique de récurrence sur un
entier , ( Dans notre cas entier c’est littérateur entre les passages dans la
boucle)

3/27

Correction et Terminaison d’un algorithme


Introduction et problématique Rappel Récurrence Correction Terminaison

quelque types de Récurrence

récurrence simple
récurrence Double
récurrence forte
...

4/27

Correction et Terminaison d’un algorithme


Introduction et problématique Rappel Récurrence Correction Terminaison

Exemple récurrence Simple

 
n n−k k
(a + b)n = Σni=0 a b
k

5/27

Correction et Terminaison d’un algorithme


Introduction et problématique Rappel Récurrence Correction Terminaison

Exemple récurrence double

On considère la suite (un ) définie par :


(
U0 = U1 = − 1
∀n ∈ N, Un+2 = 5Un+1 − 6Un
Démontrer que
∀n ∈ N, Un = 3n − 2n+1

6/27

Correction et Terminaison d’un algorithme


Introduction et problématique Rappel Récurrence Correction Terminaison

Exemple récurrence forte

On considère la suite (un ) définie par :


(
U0 = 1
∀n ∈ N, Un+1 = ∑ni=0 Ui
Démontrer que
∀n ∈ N∗ , Un = 2n−1

7/27

Correction et Terminaison d’un algorithme


Introduction et problématique Rappel Récurrence Correction Terminaison

Correction d’un algorithme ( ou correction partielle )

Définition 1
Il s’agit de montrer que la sortie produite vérifie la postcondition de l’algorithme
(quelle que soit l’entrée vérifiant la précondition). Pour cela, on utilise la notion
d’invariant de boucle. Il s’agit d’une propriété attachée à une boucle qui :
Est vraie initialement, avant de commencer la boucle ;
Est maintenue vraie par toute itération de la boucle, d’où son nom d’invariant.

8/27

Correction et Terminaison d’un algorithme


Introduction et problématique Rappel Récurrence Correction Terminaison

Méthode invariant de boucle

En pratique, on procède en 3 étapes pour prouver la correction partielle d’un


algorithme :
1 INITIALISATION
On prouve que l’invariant est vrai avant l’entrée dans la boucle et donc
avant d’exécuter la première itération.

9/27

Correction et Terminaison d’un algorithme


Introduction et problématique Rappel Récurrence Correction Terminaison

Méthode invariant de boucle

En pratique, on procède en 3 étapes pour prouver la correction partielle d’un


algorithme :
1 INITIALISATION
On prouve que l’invariant est vrai avant l’entrée dans la boucle et donc
avant d’exécuter la première itération.
2 CONSERVATION
On prouve que l’invariant est conservé par une itération de boucle. Pour
cela : on suppose que l’invariant est vrai avant l’itération i de boucle
puis on montre que l’invariant est toujours vrai après l’itération i (et
donc vrai avant l’itération i+1).

9/27

Correction et Terminaison d’un algorithme


Introduction et problématique Rappel Récurrence Correction Terminaison

Méthode invariant de boucle

En pratique, on procède en 3 étapes pour prouver la correction partielle d’un


algorithme :
1 INITIALISATION
On prouve que l’invariant est vrai avant l’entrée dans la boucle et donc
avant d’exécuter la première itération.
2 CONSERVATION
On prouve que l’invariant est conservé par une itération de boucle. Pour
cela : on suppose que l’invariant est vrai avant l’itération i de boucle
puis on montre que l’invariant est toujours vrai après l’itération i (et
donc vrai avant l’itération i+1).
3 CONCLUSION
On utilise le fait que l’invariant soit vrai en sortie de boucle pour
montrer la correction partielle de l’algorithme.

9/27

Correction et Terminaison d’un algorithme


Introduction et problématique Rappel Récurrence Correction Terminaison

Exemple

1 def somme1 ( n ) :
2 s = 0
3 for i in range ( n ) :
4 s += i
5 return s

Prouver la correction de cet algorithme consiste donc à prendre un entier


supérieur à 0 (précondition) quelconque et de montrer qu’à la fin de
l’algorithme, la variable s est bien la somme Σnk=0 k (postcondition).
Démontrons cela !

10/27

Correction et Terminaison d’un algorithme


Introduction et problématique Rappel Récurrence Correction Terminaison

Exemple

1 def somme1 ( n ) :
2 s = 0
3 for i in range ( n ) :
4 s += i
5 return s

Prouver la correction de cet algorithme consiste donc à prendre un entier


supérieur à 0 (précondition) quelconque et de montrer qu’à la fin de
l’algorithme, la variable s est bien la somme Σnk=0 k (postcondition).
Démontrons cela !
Il faut commencer par trouver un invariant : pour cela, on cherche une
propriété qui est vraie avant d’exécuter le tour de boucle i. Nous
pouvons choisir l’invariant de boucle suivant : s = Σik=0 k.

10/27

Correction et Terminaison d’un algorithme


Introduction et problématique Rappel Récurrence Correction Terminaison

INITIALISATION
(L’invariant est-il vrai avant la première itération ?) Vérifions que
l’invariant est vrai pour i = 0 (c’est-à-dire que s = Σ0k=0 k = 0. Avant
l’entrée dans la boucle, s = 0 ( une somme vide est nulle ) donc on a bien
s = 0 = Σ0k=0 k.

11/27

Correction et Terminaison d’un algorithme


Introduction et problématique Rappel Récurrence Correction Terminaison

INITIALISATION
(L’invariant est-il vrai avant la première itération ?) Vérifions que
l’invariant est vrai pour i = 0 (c’est-à-dire que s = Σ0k=0 k = 0. Avant
l’entrée dans la boucle, s = 0 ( une somme vide est nulle ) donc on a bien
s = 0 = Σ0k=0 k.
CONSERVATION
(L’invariant est-il maintenu vrai par une itération de la boucle ?)
Supposons que l’invariant soit vrai au début de l’itération d’indice i-1 de
boucle, c’est-à-dire que l’invariant de l’itération précédente est vrai : s =
Σik−=10 k. après , on a l’itération s+=i dont la quelle on affecte a s la valeur
de s + i alors , s = Σki−=10 k + i = Σik=0 k

11/27

Correction et Terminaison d’un algorithme


Introduction et problématique Rappel Récurrence Correction Terminaison

INITIALISATION
(L’invariant est-il vrai avant la première itération ?) Vérifions que
l’invariant est vrai pour i = 0 (c’est-à-dire que s = Σ0k=0 k = 0. Avant
l’entrée dans la boucle, s = 0 ( une somme vide est nulle ) donc on a bien
s = 0 = Σ0k=0 k.
CONSERVATION
(L’invariant est-il maintenu vrai par une itération de la boucle ?)
Supposons que l’invariant soit vrai au début de l’itération d’indice i-1 de
boucle, c’est-à-dire que l’invariant de l’itération précédente est vrai : s =
Σik−=10 k. après , on a l’itération s+=i dont la quelle on affecte a s la valeur
de s + i alors , s = Σki−=10 k + i = Σik=0 k
CONCLUSION
(On utilise l’invariant en sortie de boucle pour prouver que l’algorithme
donne le bon résultat) En particulier, l’invariant sera toujours vrai après
la dernière itération de la boucle, celle d’indice i = n – 1. Au début de
−2
cette dernière itération on a s = Σnk= 0 k et après les instructions de la
n−1
dernière itération on a s = Σk=0 k. Autrement dit, après l’exécution de
l’algorithme, la variable s est bien la somme de tous les éléments de 0
jusqu’au n . Cela prouve la correction partielle de l’algorithme. 11/27

Correction et Terminaison d’un algorithme


Introduction et problématique Rappel Récurrence Correction Terminaison

Terminaison

Définition
On dit que l’exécution d’un algorithme se termine si elle produit un résultat
en temps fini quelles que soient les données d’entrées fournies vérifient les
préconditions.

Maintenant qu’on sait démontrer qu’un programme est correct ( correct


localement ) on utilisant un invariant de boucle on passe à l’autre partie aussi
très importante Démonstration de Terminaison d’un algorithme.
pour cela on sépare les cas possible d’un programme pour extraire quand ce
dernier peut ne pas terminer .
la premier structure est Structure conditionnelle if ... elif ....else

12/27

Correction et Terminaison d’un algorithme


Introduction et problématique Rappel Récurrence Correction Terminaison

Terminaison

Définition
On dit que l’exécution d’un algorithme se termine si elle produit un résultat
en temps fini quelles que soient les données d’entrées fournies vérifient les
préconditions.

Maintenant qu’on sait démontrer qu’un programme est correct ( correct


localement ) on utilisant un invariant de boucle on passe à l’autre partie aussi
très importante Démonstration de Terminaison d’un algorithme.
pour cela on sépare les cas possible d’un programme pour extraire quand ce
dernier peut ne pas terminer .
la premier structure est Structure conditionnelle if ... elif ....else
puis la structure répétitive qui ce devise elle même en deux partie :
boucle déterministe : for qui opère avec un iterateur Sur une Séquence
éventuellement fini .
boucle in déterministe : while qui opère (boucle ) Tant que une condition
donnée n’est pas encore vérifier .

12/27

Correction et Terminaison d’un algorithme


Introduction et problématique Rappel Récurrence Correction Terminaison

Terminaison

Définition
On dit que l’exécution d’un algorithme se termine si elle produit un résultat
en temps fini quelles que soient les données d’entrées fournies vérifient les
préconditions.

Maintenant qu’on sait démontrer qu’un programme est correct ( correct


localement ) on utilisant un invariant de boucle on passe à l’autre partie aussi
très importante Démonstration de Terminaison d’un algorithme.
pour cela on sépare les cas possible d’un programme pour extraire quand ce
dernier peut ne pas terminer .
la premier structure est Structure conditionnelle if ... elif ....else
puis la structure répétitive qui ce devise elle même en deux partie :
boucle déterministe : for qui opère avec un iterateur Sur une Séquence
éventuellement fini .
boucle in déterministe : while qui opère (boucle ) Tant que une condition
donnée n’est pas encore vérifier .
enfin la structure Fonction qui peut contenir les autres structure mais
aussi peut être Récursive 12/27

Correction et Terminaison d’un algorithme


Introduction et problématique Rappel Récurrence Correction Terminaison

Remarque
alors il est claire que seul les boucle indéterministes et fonctions récursives
peuvent poser un problème dans le teste du terminaison d’un programme

13/27

Correction et Terminaison d’un algorithme


Introduction et problématique Rappel Récurrence Correction Terminaison

Remarque
alors il est claire que seul les boucle indéterministes et fonctions récursives
peuvent poser un problème dans le teste du terminaison d’un programme

Exemple Boucle infinie


1 i =0
2 while i < 5 :
3 print ( i )

13/27

Correction et Terminaison d’un algorithme


Introduction et problématique Rappel Récurrence Correction Terminaison

Remarque
alors il est claire que seul les boucle indéterministes et fonctions récursives
peuvent poser un problème dans le teste du terminaison d’un programme

Exemple Boucle infinie


1 i =0
2 while i < 5 :
3 print ( i )

Exemple fonction récursive


1 def fact ( n ) :
2 if n == 0 :
3 return 1
4 return n * fact (n -1)

13/27

Correction et Terminaison d’un algorithme


Introduction et problématique Rappel Récurrence Correction Terminaison

Preuve de terminaison

Pour établir la terminaison d’une répétitive tant que, on doit identifier


un variant (ne pas confondre avec l’invariant !) de la répétitive.
Un variant est une expression à valeur entière dépendant des variables
impliquées dans la répétitive dont on peut démontrer que la valeur :
Décroit strictement au cours des itérations ;
Est positive ou nulle (du fait des initialisations et de la condition de la
répétitive).

14/27

Correction et Terminaison d’un algorithme


Introduction et problématique Rappel Récurrence Correction Terminaison

Preuve de terminaison

Pour établir la terminaison d’une répétitive tant que, on doit identifier


un variant (ne pas confondre avec l’invariant !) de la répétitive.
Un variant est une expression à valeur entière dépendant des variables
impliquées dans la répétitive dont on peut démontrer que la valeur :
Décroit strictement au cours des itérations ;
Est positive ou nulle (du fait des initialisations et de la condition de la
répétitive).

Remarque
Donc le variant est un entier qui diminue strictement à chaque itération et
qui reste positif. Il ne peut donc prendre qu’un nombre fini de valeurs, ce
qui prouve que le nombre d’itérations de la répétitive tant que est fini, donc
celle-ci termine.

14/27

Correction et Terminaison d’un algorithme


Introduction et problématique Rappel Récurrence Correction Terminaison

boucle : for

Cadre générale de démonstration de terminaison d’un boucle déterministe


Le fait qu’un boucle for nécessite un littérateur qui parcours une séquence
fini peut nous amène a choisir un variant pour tous les boucles déterministe
représenter par nombre des éléments dans la séquence - indice d’itérateur .
cette suite est sûrement strictement décroissante ainsi qu’elle est convergente
car le nombre d’itérations est fini ( bornée ) .

Exemple
1 for i in range (3 ,10) :
2 print ( i )

15/27

Correction et Terminaison d’un algorithme


Introduction et problématique Rappel Récurrence Correction Terminaison

Boucle : while

16/27

Correction et Terminaison d’un algorithme


Introduction et problématique Rappel Récurrence Correction Terminaison

Boucle : while

Dans le cadre des boucles indéterministes on peut distinguer deux cas de


figures :
des boucles indéterministes simples
Exemple :
1 d ,f , p =1 ,10 ,2
2 i=d
3 while i < f :
4 print ( i )
5 i += p

Remarque
Dans ce cas on pourra (comme dans la boucle déterministe ) la structure
représentant une suite décroissante minorée ( croissante majorée ) pour
démontrer que cette dernier termine

16/27

Correction et Terminaison d’un algorithme


Introduction et problématique Rappel Récurrence Correction Terminaison

Dans l’autre cas - D’une boucle non simple - on ferra appelle à une structure
de récurrence ( Induction "vu au début" )

17/27

Correction et Terminaison d’un algorithme


Introduction et problématique Rappel Récurrence Correction Terminaison

Dans l’autre cas - D’une boucle non simple - on ferra appelle à une structure
de récurrence ( Induction "vu au début" ) Quel type d’induction alors ? !
1 Simple
2 double

17/27

Correction et Terminaison d’un algorithme


Introduction et problématique Rappel Récurrence Correction Terminaison

Dans l’autre cas - D’une boucle non simple - on ferra appelle à une structure
de récurrence ( Induction "vu au début" ) Quel type d’induction alors ? !
1 Simple
2 double
3 forte

17/27

Correction et Terminaison d’un algorithme


Introduction et problématique Rappel Récurrence Correction Terminaison

Autres types de Récurrence

récurrence simple
récurrence Double
récurrence forte

18/27

Correction et Terminaison d’un algorithme


Introduction et problématique Rappel Récurrence Correction Terminaison

Autres types de Récurrence

récurrence simple
récurrence Double
récurrence forte
induction structurelle

18/27

Correction et Terminaison d’un algorithme


Introduction et problématique Rappel Récurrence Correction Terminaison

Induction Structurelle

Définition
Le schéma de la démonstration précédente est applicable a tous les types de
données définis récursivement. On peut se passer de l’induction sur le
nombre d’applications des règles en invoquant le principe d’induction
structurelle.

19/27

Correction et Terminaison d’un algorithme


Introduction et problématique Rappel Récurrence Correction Terminaison

Autres types de Récurrence

récurrence simple
récurrence Double
récurrence forte
induction structurelle

20/27

Correction et Terminaison d’un algorithme


Introduction et problématique Rappel Récurrence Correction Terminaison

Autres types de Récurrence

récurrence simple
récurrence Double
récurrence forte
induction structurelle
induction bien fondée

20/27

Correction et Terminaison d’un algorithme


Introduction et problématique Rappel Récurrence Correction Terminaison

Induction bien fondée

Définition
Soit E un ensemble ordonné par ≤ et F ⊆ E.
x est un élément minimal de F si F ne contient pas d’élément strictement
plus petit que x.(y ∈ F , y ≤ x implique x = y).
Un ordre bien fondé ≤ sur un ensemble E est un ordre tel que tout
sous-ensemble non-vide de E admet un élément minimal, et (E, ≤) est
dit bien fondé.

21/27

Correction et Terminaison d’un algorithme


Introduction et problématique Rappel Récurrence Correction Terminaison

Induction bien fondée

Définition
Soit E un ensemble ordonné par ≤ et F ⊆ E.
x est un élément minimal de F si F ne contient pas d’élément strictement
plus petit que x.(y ∈ F , y ≤ x implique x = y).
Un ordre bien fondé ≤ sur un ensemble E est un ordre tel que tout
sous-ensemble non-vide de E admet un élément minimal, et (E, ≤) est
dit bien fondé.

Motivation
Allons alors utiliser cette forme induction sur un exemple !

21/27

Correction et Terminaison d’un algorithme


Introduction et problématique Rappel Récurrence Correction Terminaison

Exemple 1

1 d ,f , p =1 ,10 ,2
2 i=d
3 while i < f :
4 print ( i )
5 i += p

soit n ∈ N avec n = f - i
Initiation donc ( n = 10 - 1 = 9 au debut de la boucle )
Induction : soit n1 ∈ N valeur de n dans l’itération i n1 = f - i = 10 - i et
on pose n2 valeur de n dans l’itération i+p (i+2) n2 = f - i - 2 = 10 - i - 2 = 8
- i donc V(n2 ) ≤ V(n1 ) donc dans E = [0,10] on a bien (E,≤) .
Conclusion : Pas induction bien Fondée la boucle termine

22/27

Correction et Terminaison d’un algorithme


Introduction et problématique Rappel Récurrence Correction Terminaison

1 def pgcd (a , b ) :
2 u = max (a , b )
3 v = min (a , b )
4 w = u%v
5 while w != 0 :
6 u=v
7 v=w
8 w=u%v
9 return v

23/27

Correction et Terminaison d’un algorithme


Introduction et problématique Rappel Récurrence Correction Terminaison

1 def pgcd (a , b ) :
2 u = max (a , b )
3 v = min (a , b )
4 w = u%v
5 while w != 0 :
6 u=v
7 v=w
8 w=u%v
9 return v

Ce programme décrite comment on peut trouver le plus grand diviseur


commun (PGCD) de deux entier naturelle non nulles !

23/27

Correction et Terminaison d’un algorithme


Introduction et problématique Rappel Récurrence Correction Terminaison

1 def pgcd (a , b ) :
2 u = max (a , b )
3 v = min (a , b )
4 w = u%v
5 while w != 0 :
6 u=v
7 v=w
8 w=u%v
9 return v

Ce programme décrite comment on peut trouver le plus grand diviseur


commun (PGCD) de deux entier naturelle non nulles !
Pour la correction de cette méthode on laisse la main a votre
professeur de mathématiques !

23/27

Correction et Terminaison d’un algorithme


Introduction et problématique Rappel Récurrence Correction Terminaison

1 Cas de base :
pour le case de base : si v et multiple de u alors la boucle termine et le
résultat sûrement est la valeur la plus petite entre les deux ( v ) .
2 Induction :
Considérons la fonction V (u, v, w) −→ w, soit l’état s := (u −→ uk , v −→
vk , w −→ wk ) obtenu après k passage dans la boucle, et supposons
qu’elle existe une itération suivante, soit s′ := (u −→ uk+1 , v −→ vk+1 , w
−→ wk+1 ) l’état obtenu après l’exécution sur s du corps de la boucle.
On a :
uk+1 = vk ,
vk+1 = wk ,
wk+1 = uk+1 %vk+1 =⇒ q ∈ N : uk+1 = qvk+1 + wk+1
tel que : 0 ≤ wk+1 < vk+1 = wk
V (s) ∈ N, V (s′ ) ∈ N et V (s′ ) < V (s)
3 Conclusion
Donc V est variant de boucle dans N, par suite l’algorithme se termine
24/27

Correction et Terminaison d’un algorithme


Introduction et problématique Rappel Récurrence Correction Terminaison

Fonction recursive

Maintenant qu’on a définit l’induction bien fondée c’est simple ! !


Par exemple :
1 def fact ( n ) :
2 if n == 0 :
3 return 1
4 return n * fact (n -1)

Considérons l’ensemble (N, ≤),et la fonction : V : n −→ n. On a V(n - 1) = n -


1<n
Donc V(n - 1) < V(n) Ainsi la fonction factorielle termine.

25/27

Correction et Terminaison d’un algorithme


Introduction et problématique Rappel Récurrence Correction Terminaison

Exemple 2 : Fibonacci

1 def fib ( n ) :
2 if n == 0 or n == 1 :
3 return n
4 return fib (n -1) + fib (n -2)

26/27

Correction et Terminaison d’un algorithme


Introduction et problématique Rappel Récurrence Correction Terminaison

Exemple 2 : Fibonacci

1 def fib ( n ) :
2 if n == 0 or n == 1 :
3 return n
4 return fib (n -1) + fib (n -2)

Mémé démonstration que factorielle !

26/27

Correction et Terminaison d’un algorithme


Introduction et problématique Rappel Récurrence Correction Terminaison

Exemple 3

1 def p u i s s a n c e _ D e u x _ I n f e r i e u r e ( Nombre ) :
2 i =0
3 while 2** i < Nombre :
4 i +=1
5 if i >0 :
6 return 2**( i -1)
7 else :
8 return 1

27/27

Correction et Terminaison d’un algorithme

Vous aimerez peut-être aussi