1. Enseignant : Mohamed SAYARI 4 SI Algorithmique & Programmation
LES ALGORITHMES RECURRENTS
I. Introduction
Un algorithme ou un traitement est dit récurrent s’il utilise un procédé itératif ou récursif pour
engendrer un résultat qui peut dépendre de p résultats précédents, nous parlons d’un algorithme ou d’un
traitement récurrent d’ordre p. (voir livre page 124).
II. Calcule de somme
ACTIVITE1 : écrire un programme modulaire en Pascal qui permet de remplir une matrice carré d’ordre
N (4≤N≤20) par des entiers aléatoires appartenant à l’intervalle [-30,30], calcule puis affiche la somme des
éléments de M.
a) Analyse du programme principal
2) Résultat = Ecrire ("la somme des éléments de la matrice =", FN SOMME (M, N))
1) (M, N) = Proc remplir (M, N)
Algorithme du programme principal
TDNT
0) Début SOMME_MATRICE
TYPE
1) Proc remplir (M, N)
Matrice = Tableau [1..50, 1..50] d’entiers
TDOG 2) Ecrire ("la somme des éléments de la matrice =",
Objet Type/Nature Rôle FN SOMME (M, N))
M matrice Contient des entiers 3) Fin SOMME_MATRICE
N Entier Taille de matrice
remplir Procédure Remplit la matrice
somme Fonction Calcule la somme
b) Analyse de la procédure remplir
DEF PROC REMPLIR (var M : matrice ; var N : entier)
Résultat= M, N
2) M= [ ] pour i de 1 à n faire
Pour j de 1 à n faire
M [i,j] Hasard(30) – Hasard(30)
Fin Pour Algorithme de la procédure Remplir
Fin Pour
1) N = [ ] Répéter 0) DEF PROC REMPLIR (var M : matrice ; var n : entier)
1) Répéter
N= Donnée ("N=")
Ecrire ("N="), lire (N)
Jusqu’à (N dans [4..20])
Jusqu’à (N dans [4..20])
2) pour i de 1 à n faire
TDOL Pour j de 1 à n faire
M [i,j] Hasard(30) – Hasard(30)
objet Type/Nature Rôle Fin Pour
I Entier Compteur Fin Pour
j Entier compteur 3) Fin Remplir
LES ALGORITHMES RECURRENTS 1
2. Enseignant : Mohamed SAYARI 4 SI Algorithmique & Programmation
c) Analyse de la fonction somme
DEF FN SOMME (M : matrice ; N : entier) : entier Algorithme de la fonction SOMME
2) Résultat = somme S
0) DEF FN SOMME (M : matrice ; N : entier) : entier
1) S= [S0] pour i de 1 à n faire
1) S0
Pour j de 1 à n faire
Pour i de 1 à n faire
S S + M [i,j]
Pour j de 1 à n faire
Fin pour
S S + M [i,j]
Fin pour
Fin pour
TDOL Fin pour
2) Somme s
objet Type/Nature Rôle
3) Fin SOMME
I Entier Compteur
j Entier compteur
LES ALGORITHMES RECURRENTS 2
3. Enseignant : Mohamed SAYARI 4 SI Algorithmique & Programmation
III. Algorithmes récurrents sur les chaînes
ACTIVITE2 : écrire un programme modulaire en Pascal qui permet de calculer et d’afficher le N ième terme
de la suite de Thue-Morse à partir du premier terme U0 ("1" ou "0") avec 2≤N ≤100.
Exemples :
U0= "0" U0= "1"
U1= "01" U1= "10"
U2= "0110" U2= "1001"
U3= "01101001" U3= "10010110"
U4= "0110100110010110" U4= "1001011001101001"
On remarque que ce traitement est récurrent d’ordre 1.
a) Analyse du programme principal
2) Résultat= Ecrire ("la suite Thue Morse à partir de ", U0, "d’ordre ", N "=", FN Thue_Morse (U0, n))
1) (U0, N)= proc saisir (U0, N)
Algorithme du programme principal
TDOL 0) Début suite_thue_Morse
1) Proc saisir (U0, N)
objet Type/Nature Rôle 2) ("la suite Thue Morse à partir de ", U0, "d’ordre ", N "=", FN
N entier Nombre de terme Thue_Morse(U0, n))
U0 caractère Premier terme 3) Fin suite_thue_Morse
Thue_Morse Fonction suite
Algorithme de la procédure saisir
b) Analyse de la procédure saisir
0) DEF PROC SAISIR (var U0 : caractère ; var N : entier)
DEF PROC SAISIR (var U0 : caractère ; var N : entier)
1) Répéter
Résultat= U0, N Ecrire ("premier terme= "), lire (U0)
2) N= [ ] répéter Jusqu’à (U0 dans ["1", "0"])
N= Donnée ("N= ") 2) Répéter
Jusqu’à N dans [2..100] Ecrire ("N= "), lire (N)
1) U0= [ ] Répéter Jusquà N dans [2..100]
3) Fin SAISIR
U0= Donnée ("premier terme= ")
Jusqu’à U0 dans ["1", "0"]
Algorithme de la fonction Thue_Morse
c) Analyse de la fonction thue_morse 0) DEF FN Thue_Morse (u0 : caractère ; n : entier) : chaîne
DEF FN Thue_Morse (U0 : caractère ; n : entier) : chaîne 1) CH U0
2) Résultat= Thue_Morse ch Pour i de 1 à n faire
J 1
1) Ch= [ch U0] pour i de 1 à n faire Tant que j≤long(ch) faire
J 1 Si ch[j]="0" alors insère ("1", ch, j+1)
Tant que j≤long (ch) faire Sinon insère ("0", ch, j+1)
J j+2
Si ch[j]="0" alors insère ("1", ch, j+1) Fin tant que
Sinon insère ("0", ch, j+1) Fin pour
J j+2 2) Thue_Morse ch
Fin tant que 3) Fin Thue_Morse
Fin pour TDOL
Objet Type/Nature Rôle
I entier Compteur
J Entier Compteur
ch Chaîne Chaine finale Thue_Morse
LES ALGORITHMES RECURRENTS 3
4. Enseignant : Mohamed SAYARI 4 SI Algorithmique & Programmation
IV. Triangle de Pascal
ACTIVITE3 : écrire un programme modulaire en Pascal qui permet d’afficher les n premiers lignes du
triangle de Pascal (2≤N≤30).
a) Analyse du programme principal
2) Résultat= proc affiche (M, N)
1) (M, N)= proc remplir (M, N)
Algorithme du programme principal
TDNT
0) Début TRIANGLE_PASCAL
TYPE
1) Proc remplir (M, N)
Matrice = Tableau [1..50, 1..50] d’entiers
2) Proc Affiche (M, N)
TDOG 3) Fin TRIANGLE_PASCAL
Objet Type/Nature Rôle
M matrice Contient des entiers
N Entier Taille de matrice
remplir Procédure Remplit la matrice
affiche procédure Affiche la matrice
LES ALGORITHMES RECURRENTS 4
5. Enseignant : Mohamed SAYARI 4 SI Algorithmique & Programmation
Algorithme de la procédure Remplir
b) Analyse de la procédure remplir
0) DEF PROC Remplir (var M : matrice ; var n : entier)
DEF PROC Remplir (var M : matrice ; var n : entier)
1) répéter
Résultat= M, N
Ecrire ("N="), lire(N)
2) M= [M[1,1] 1 Jusqu’à N dans [2..50]
M[2,1] 1 2) M[1,1] 1
M[2,2] 1] pour i de 3 à n faire M[2,1] 1
M[1,i] 1 M[2,2] 1
M[i, 1] 1 pour i de 3 à n faire
Pour j de 2 à n faire M[1,i] 1
M[i,j] M[i-1,j]+M[i-1,j-1] M[i, 1] 1
Fin Pour Pour j de 2 à n faire
Fin Pour M[i,j] M[i-1,j]+M[i-1,j-1]
Fin Pour
1) N= [ ] répéter
Fin Pour
N= Donnée ("N=")
3) Fin Remplir
Jusqu’à N dans [2..50]
TDOL
objet Type/Nature Rôle
I Entier Compteur
j Entier compteur
c) Analyse de la procédure Affiche Algorithme de la procédure Affiche
DEF PROC Affiche (M : matrice ; n : entier)
0) DEF PROC Affiche (M : matrice ; n : entier)
Résultat= Affichage
1) pour i de 1 à n faire
1) Affichage= [ ] pour i de 1 à n faire
Pour j de 1 à i faire
Pour j de 1 à i faire
Ecrire (M [i,j])
Ecrire (M [i,j])
Fin pour
Fin pour
Fin pour
Fin pour 2) fin Affiche
TDOL
objet Type/Nature Rôle
I Entier Compteur
j Entier compteur
LES ALGORITHMES RECURRENTS 5
6. Enseignant : Mohamed SAYARI 4 SI Algorithmique & Programmation
V. Suite de Fibonnaci
ACTIVITE4 : écrire un programme modulaire en Pascal qui permet de calculer et d’afficher le Nième terme
de la suite de Fibonnaci définie par :
U1 = 1
U2=1
Un= Un-1+ Un-2
a) Analyse du programme principal
2) Résultat = Ecrire ("FIB (", N, ")=", FIB(N))
1) N= Proc saisir (N) Algorithme du programme principal
0) Début SUITE_FIB
TDOG 1) Proc saisir (N)
2) Ecrire ("FIB (", N, ")=", FIB(N))
objet Type/Nature Rôle
3) Fin SUITE_FIB
N Entier Compteur
FIB Fonction Calculer la suite
saisir procédure Nième Terme
LES ALGORITHMES RECURRENTS 6
7. Enseignant : Mohamed SAYARI 4 SI Algorithmique & Programmation
b) Analyse de la procédure saisir Algorithme de la procédure saisir
DEF PROC SAISIR (var N : entier)
Résultat= N 0) DEF PROC SAISIR (var N : entier)
1) N= [ ] répéter 1) répéter
N= Donnée ("N=") Ecrire ("N="), lire (N)
Jusqu’à (N dans [1..100]) Jusqu’à (N dans [1..100])
2) fin SAISIR
c) Analyse de la fonction FIB1 (itérative)
DEF FN FIB1 (N : entier) : entier Algorithme de la fonction FIB1
2) Résultat = FIB1 F
0) DEF FN FIB1 (N : entier) : entier
1) F= [U11, U21] Si N≤2 alors F 1
1) U11
Sinon U21
Pour i de 3 à N faire Si n≤2 alors F 1
F U1 + U2 Sinon
U2 U1 Pour i de 3 à N faire
F U1 + U2
U1 F
U2 U1
Fin pour U1 F
Fin si Fin pour
Fin si
TDOL 2) FIB1 F
objet Type/Nature Rôle 3) Fin FIB1
U1 Entier Premier terme
U2 Entier Second terme
F Entier Valeur final de suite
i Entier compteur
LES ALGORITHMES RECURRENTS 7
8. Enseignant : Mohamed SAYARI 4 SI Algorithmique & Programmation
d) Analyse de la fonction FIB2 (itérative)
DEF FN FIB2 (N : entier) : entier Algorithme de la fonction FIB2
2) Résultat= FIB2 U[n] 0) DEF FN FIB2 (N : entier) : entier
1) U[n]= [U [1]1 1) U [1]1
U [2] 1] pour i de 3 à n faire U [2] 1
U[i] U [i-1] + U [i-2] Pour i de 3 à n faire
Fin pour U[i] U [i-1] + U [i-2]
Fin pour
TDNT 1) FIB2 U[n]
TYPE 2) Fin FIB2
TAB= tableau [1..100] d’entiers
TDOL
objet Type/Nature Rôle
i entier Compteur
U TAB Tableau contenant les termes
e) Analyse de la fonction FIB3 (récursive) Algorithme de la fonction FIB3
DEF FN FIB2 (N : entier) : entier
0) DEF FN FIB2 (N : entier) : entier
Résultat= FIB3
1) si N≤2 alors FIB3 1
1) FIB3= [ ] si N≤2 alors FIB3 1 Sinon FIB3 FIB3 (n-1) +
Sinon FIB3 FIB3 (n-1) + FIB3 (n-2) FIB3 (n-2)
Fin si Fin si
2) fin FIB3
LES ALGORITHMES RECURRENTS 8
9. Enseignant : Mohamed SAYARI 4 SI Algorithmique & Programmation
VI. Nombre d’or
VI.1 Définition
√
Le nombre d’or est la solution positive de l’équation x2 – x – 1 = 0. C’est le nombre
VI.2 Activité1 : compléter le tableau du livre page 139.
√
La suite Vn définie sur N*par semble convergente vers
VI.3 Activité2 :
Soient deux suites U et V définies par :
U1=1
U2=2
Un = Un-1 + Un-2 pour n≥3 Vn= pour n≥2
On suppose que la suite Vn tend vers nue valeur limite appelé nombre d’or. On suppose que le nième
terme de la suite V soit V, donc une valeur approchée du nombre d’or avec une précision e dés que
|Vn – Vn-1|<e.
Ecrire un programme modulaire en Pascal qui cherche Vn à 10-4 prés et son rang.
a) Analyse du programme principal
Algorithme du programme principal
2) Résultat= proc Affiche (v,n)
1) (V,n,u) = proc remplir (u, v, n) 0) Début Calcul
TDNT 1) proc remplir (u, v, n)
2) proc Affiche (v,n)
TYPE
3) fin
TAB1= tableau [1..100] de réel
TAB2= tableau [1..100] d’entier
TDOL
objet Type/Nature Rôle
n entier Taille maximale des vecteurs
U TAB2 Tableau contenant les termes
V TAB1 Tableau contenant les termes
affiche procédure affichage
remplir procédure Remplit V et U
Algorithme de la procédure REMPLIR
b) Analyse de la procédure REMPLIR
0) DEF PROC REMPLIR (var u : tab2 ; var v : tab1 ; var n : entier)
DEF PROC REMPLIR (var u : tab2 ; var v : tab1 ; var n : entier)
1) U [1]1
Résultat= u, v, n U [2] 2
1) (u, v, n)= [U [1]1 Répéter
n n+1
U [2] 2] répéter
U[n] u [n-1] + u [n-2]
N n+1 V[n] u[n]/u [n-1]
U[n] u [n-1] + u [n-2] Jusqu’à (abs (v[n]-v [n-1] <0.0001)
2) Fin REMPLIR
V[n] u[n]/u [n-1]
Jusqu’à (abs (v[n]-v [n-1] <0.0001)
LES ALGORITHMES RECURRENTS 9
10. Enseignant : Mohamed SAYARI 4 SI Algorithmique & Programmation
c) Analyse de la fonction Affiche
DEF PROC AFFICHE (v : tab1 ; n : entier)
0) Résultat= Ecrire ("le nombre d'or= ", v[n], " obtenu après ", n, " itérations")
Algorithme de la procédure Affiche
0) DEF PROC AFFICHE (v : tab1 ; n : entier)
1) Ecrire ("le nombre d'or= ", v[n], " obtenu après ", n, " itérations")
2) Fin AFFICHE
VII. Applications (livre 144-147)
LES ALGORITHMES RECURRENTS 10