Académique Documents
Professionnel Documents
Culture Documents
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.
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.
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
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?
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