Travaux Dirig´ es d’algorithmique n
o2
Cours d’informatique de Deuxi` eme Ann´ ee
—L2.1—
R´ ecursivit´ e
La r´ecursivit´e est une m´ethode de programmation tr`es puissante. Elle permet d’´ecrire des programmes faciles `a comprendre et souvent efficaces bien que son principal inconv´enient est d’obliger le compilateur `a utiliser une pile pour m´emoriser les calculs interm´ediaires.
x
Exercice 1. Factorielle
La fonction factorielle d’un entier positif ou nul n, not´ ee n!, est d´ efinie par
n! =
(
1 si n = 0, (n
−1)!
∗n si n > 0.
Ecrire une fonction
C, r´ ecursive, qui calcule la factorielle d’un entier positif. Ecrire une fonction
C, it´ erative, qui calcule la factorielle d’un entier.
x
Exercice 2. Puissance
Soient a un entier et n un entier positif ou nul. On se propose de calculer a
nen utilisant les trois propri´ et´ es suivantes :
1. a
n=
(
a
∗a
n−1si n > 0,
1 si n = 0.
2. a
n=
(a
2)
bn/2csi n > 0 est pair, a
∗(a
2)
bn/2csi n est impair,
1 si n = 0.
3. a
n=
(a
bn/2c)
2si n > 0 est pair, a
∗(a
bn/2c)
2si n est impair,
1 si n = 0.
´
ecrire, pour chacune des trois propri´ et´ es susnomm´ ees, une fonction
Cr´ ecursive qui retourne a
nen utilisant cette propri´ et´ e.
1
x
Exercice 3. Etrange
Apr` es ex´ ecution du programme suivant, qu’a-t-on en sortie ? Que fait la fonction
Etrangeet en particulier, ` a quel moment a lieu le “passage ` a la ligne” ?
#include <stdio.h>
void Etrange(int n) {
if (n <= 0) printf("\n");
else
{ Etrange(n-1); printf("%d ", n);}
}