Vous êtes sur la page 1sur 2

Ecole Militaire Polytechnique

Chahid Abderahmane Taleb


TP algorithmique et structures de données 2

Récursivité

2020 - 2021

Exercice 1 : Échauffement

1-​ Écrivez une fonction récursive qui renvoie la somme des chiffres d'un entier.
Si x vaut 234, la fonction doit renvoyer 2 + 3 + 4, c'est-à-dire 9.
Si x vaut 12, la fonction doit renvoyer 1 + 2, soit 3.
Si x vaut 39, la fonction doit renvoyer 12.
Si x est négatif, ignorez le signe moins. Par exemple, -12 et 12 renvoient tous les deux 3.

2-​ Écrivez une fonction récursive qui affiche tous les éléments d'un tableau d'entiers, un par
ligne.

3-​ Adaptez la fonction précédente pour afficher les éléments du tableau d'entiers dans
l’ordre inverse.

4-​ Écrivez une fonction récursive qui permet de compter le nombre de zéros dans un tableau
d'entiers.

5-​ Écrivez une fonction récursive qui recherche l'élément le plus petit dans un tableau
d'entiers.

Exercice 2 : Récursivité mutuelle

Deux fonctions sont dites ​mutuellement récursives si la première fonction fait un appel
récursif à la deuxième fonction et que la seconde, à son tour, appelle la première.
Dans le développement de logiciels, ce concept est utilisé dans la dépendance circulaire qui
est une relation entre deux ou plusieurs modules qui dépendent directement ou
indirectement les uns des autres pour fonctionner correctement.

Un bon exemple de récursivité mutuelle est la génération de la séquence de Hofstadter,


définie comme suit:
F(0)=1 ; M(0)=0
F(n)=n−M(F(n−1)),n>0
M(n)=n−F(M(n−1)),n>0

Les premiers termes de ces séquences sont


F: 1, 1, 2, 2, 3, 3, 4, 5, 5, 6, 6, 7, 8, 8, 9, 9, 10, 11, 11, 12, 13, ...
M: 0, 0, 1, 2, 2, 3, 4, 4, 5, 6, 6, 7, 7, 8, 9, 9, 10, 11, 11, 12, 12, ...

- Donnez les fonctions récursives permettant de générer la séquence de Hofstadter (F,M).

1/2
Exercice 3 : Récursivité sur les nombres

1-​ Ecrire une fonction ​récursive​ interm(a, b, c) qui renvoie un entier parmi a, b et c qui est
encadré par les deux autres.
Par exemple : interm(3, 1, 2) = 2

2-​ Ecrire une fonction récursive Est_hamming(n) qui détermine si n est un entier de
Hamming. Un entier n >0 est dit de Hamming s’il peut s’écrire comme le produit d’une
puissance de 2, d’une puissance de 3 et d’une puissance de 5.
Par exemple, 5400 est un entier de Hamming car 5400 = 23 x 33 x 52

Exercice 4 : ​Inversion récursive d'une liste chaînée

On veut réaliser l'inversion d'une liste chaînée par une méthode récursive, en utilisant les
listes chaînées.
1- Définir une fonction externe qui renvoie la valeur du premier élément de la liste.
2- Ecrire une fonction récursive Listeinverser() en n’utilisant que les méthodes des listes
chaînées.
3- Quelle est la complexité algorithmique de cette fonction?

Exercice 5 : Rangements confortables

On cherche à déterminer le nombre de rangements ​confortables de ​k ​boules dans une


succession de ​n cases vides. Dans un rangement confortable, deux boules ne sont jamais
placées dans des cases immédiatement voisines.
Pour résoudre ce problème, donnez une fonction récursive ​f(n, k) qui renvoie le nombre
total de rangements confortables possibles de k boucles dans n cases.
Par exemple : f(2, 1) vaut 2, les rangements confortables sont [[1, 0], [0, 1]]

Exercice 6 : Qui survivra?

Durant l’antiquité, un groupe de ​n soldats est encerclé par l’ennemi. Ne voulant pas tomber
entre les mains de leur ennemi, ils décident de se donner la mort. Pour cela, ils se mettent
en un cercle numéroté de 1 à n, et décident que chaque soldat élimine le soldat se trouvant
à sa gauche. Ainsi, le premier soldat élimine le soldat 2, ensuite le 3 élimine le 4, etc. La
sélection continue jusqu’à ce qu’il ne reste plus qu’un seul survivant.

1- Donnez la fonction récursive ​f(​ ​n​) qui donne la position du survivant lorsqu'il y a ​n
personnes. Par exemple: Si n=4: 1 élimine 2, 3 élimine 4, ensuite 1 élimine 3. Ainsi, f(4) =1
2- Au lieu d’éliminer le voisin de gauche immédiat, on décide de sauter un soldat pour
éliminer le soldat qui vient après.
Par exemple : Pour n=4: 1 élimine 3, 4 élimine 2, ensuite 1 élimine 1. Ainsi, g(4) =4
3- On veut généraliser ce processus. On décide alors de sauter k soldats pour éliminer le
soldat qui vient après. Donnez la fonction récursive ​f​(​n,k​) qui donne la position du survivant
lorsqu'il y a ​n​ personnes et on décide de sauter k soldats.
A noter que f(n)= h(n,0) et g(n)= h(n,1).

2/2

Vous aimerez peut-être aussi