Vous êtes sur la page 1sur 3

Correction TD4 : La récursivité

Exercice 1 : Ecrire un programme qui demande un entier n positif et teste si ce nombre est
un multiple de 5 (sans utiliser les opérateurs /, mod, rem, ...).

Programme Principal
var n : entier
début
Répeter
Lire(n)
Jusqua (n>=0)
Si Multiple_5(n) alors écrire (n est multiple de 5)
sinon écrire (n n’est pas multiple de 5)
finsi
finprogramme
Fonction Multiple_5(x :entier) : booleen
debut
si (x=0) alors Multiple_5 vrai
sinon si (x<5) alors Multiple_5  faux
sinon Multiple_5  Multiple_5(x-5)
finsi
finsi
finfonction

Exercice N°2 :
Exercice 3 : Ecrire une fonction récursive ACKERMANN qui calcule A(a,b) selon le
principe suivant :
A(0,b) = b+1
A(a,0) = A(a-1,1)
A(a,b) = A(a-1, A(a,b-1))

Fonction ACKERMAN(a,b :entier) :entier


debut
si (a=0) alors ACKERMANb+1
sinon si (b=0) alors ACKERMAN ACKERMAN(a-1,1)
sinon ACKERMAN ACKERMAN(a-1,
ACKERMAN(a,b-1))
finsi
finsi
fin

Exercice 4: Ecrire une fonction récursive de recherche dichotomique d'un élément dans
un tableau d'entiers de taille n ordonné par ordre croissant.

Fonction Rech_Dichot(Tab :tableau d’entier, ind_deb,ind_fin,Val :entier) :booleen

Debut

mil(ind_fin+ind_deb) div 2

si ind_deb>ind_fin alors Rech_Dichotfaux

Si Tab[mil]= Val alors Rech_Dichotvrai

Sinon si (Tab[mil]<Val) alors Rech_Dichot


Rech_Dichot(Tab,mil+1,ind_fin,Val)

Sinon Rech_Dichot
Rech_Dichot(Tab,ind_deb,mil-1,Val)

Finsi

Finsi

Fin

Exercice 5: Écrire une fonction récursive appelée PGCD qui calcule le PGCD de 2 entiers
a et b par la méthode d'Euclide.

exemple: PGCD(49,35) = PGCD(35,14) = PGCD(14,7) = 7


Fonction PGCD(A,B :entier) :entier

Début

si A=B alors PGCDA

sinon si A>B alors PGCD PGCD(A-B,B)

sinon PGCD PGCD(A,B-A)

finsi

finsi

fin

Exercice 6: Écrire deux fonctions qui calculent, de façon récursive, la somme et le

produit de deux nombres entiers a et b positifs ou nuls.

Fonction somme(a,b :entier) :entier


Début
si a=0 alors sommeb
sinon
si b=0 alors sommea
sinon
si a>b alors somme1+somme(a,b-1)
sinon somme1+somme(a-1,b)
finsi
/* ce test permet d’accélérer l’éxécution en diminuant le nombre d’appels
récursifs*/
finsi
finsi
fin
Fonction produit(a,b :entier) :entier
Début
si a=1 alors produitb
sinon si b=1 alors produita
sinon produita+produit(a,b-1)
finsi
fin

Vous aimerez peut-être aussi