TP Programmation : algorithme de dichotomie : « impératif vs récursif » TS
On veut résoudre une équation du type f(x)=0 sur un intervalle I avec fune fonction continue, strictement mono-
tone et qui change de signe sur un intervalle [a,b] inclus dans I.
On sait qu’il existe une solution unique αà notre équation sur [a,b].
Soit mle centre de l’intervalle. Trois cas se rencontrent :
– si f(m)=0 alors la vie est belle ;
– si f(m) a le même signe que f(a) alors α∈[m,b] (pourquoi ?) ;
– si f(m) a le même signe que f(b) alors α∈[a,m] (pourquoi ?) ;
On itère ce mécanisme jusqu’à obtenir un intervalle d’amplitude correspondant à la précision demandée sur α:
1 Algorithme impératif (ou itératif)
1.1 Version impérative
Listing 1: Algorithme impératif de dichotomie
1# -* - coding : Latin -1 -* # pour la gestion des a c cents
2def f(x):
3return x **3+ x +1
4
5A= input ("A=")
6B= input ("B=")
7E= input (" Precision = ")
8compteur =0 # on in i tia l ise le nombre d ’ i téra t ion s
9
10 if f(A)*f(B) >= 0 :
11 print " Pas de r ac in e e nt re " ,A , " et " ,B
12 else:
13 while B -A >= E :
14 C =( A + B) /2.
15 if f(A)*f(C)<= 0 :
16 B=C
17 else :
18 A=C
19 compteur += 1 # on i ncr é ment e le compte u r d ’ itér a tio n s
20 print " Une racine e ntre " ,A , " et " ,B , " avec " ,compteur ," itéra tions "
L’itération consiste à répéter plusieurs fois un sous-algorithme. Le nombre de répétitions peut être défini lors de la
rédaction de l’algorithme, mais on peut aussi indiquer à quelle condition l’itération doit se poursuivre ou non. Dans ce
cas il est nécessaire de s’assurer que la condition d’arrêt sera remplie au bout d’un nombre fini de tours de boucle pour
garantir que l’algorithme comporte un nombre fini d’étapes (condition de terminaison).
2 Algorithme récursif
Un algorithme est dit récursif lorsqu’il intervient dans sa description, c’est-à-dire lorsqu’il s’appelle lui-même.
La présentation récursive permet de présenter simplement des algorithmes beaucoup plus astucieux (et donc plus
efficaces) et cela a été admirablement montré par Tony Hoare avec son algorithme de tri rapide.
Très souvent un algorithme récursif est lié à une relation de récurrence permettant de calculer la valeur d’une fonction
pour un argument n à l’aide des valeurs de cette fonction pour des arguments inférieurs à n.
2.1 Exemple
Soit nun entier naturel non nul. Le nombre n×(n−1)×...×2×1 est appelé factorielle n.
http://lycee.lagrave.free.fr 1/3