2.2 Récursivité, Synthèse
2.2 Récursivité, Synthèse
2.2 Récursivité, Synthèse
La récursivité
éléments de cours
1 Notion de récursivité
1.1 Dénition
Une fonction f est dite récursive si la fonction f, lors de son
exécution, fait un appel à ... elle même.
Oui, c'est un peu curieux, comme si les pompiers appelaient les pompiers ! Mais nous allons voir que
nalement, cela peut devenir assez naturel.
I Si a ≤ b alors l'appel trier(a, b, c) exécute une des instructions lignes 3, 5 ou 7 ce qui renvoie la liste
ordonnée.
I Sinon, le code passe à la ligne 8 et la fonction trier est appelée en échangeant les arguments a et b en sorte
qu'à l'appel suivant, une des lignes 3, 5 ou 7 est exécutée et on obtient bien la liste triée.
La fonction trier est une fonction qui s'appelle elle-même (à la ligne 8) : c'est une fonction récursive, ce n'est pas
plus compliqué que ça.
1 import s y s
2 sys . s e t r e c u r s i o n l i m i t (5000)
3.3 Le saviez-vous ?
Dans certains environnements, l'usage de récursivité n'est pas permis.
. Dans le secteur du logiciel embarqué dans des véhicules (terrestres, aériens), certains principes d'implémenta-
tion d'unités logicielles découragent explicitement le recours à toute forme de récursion (directe ou indirecte),
cf. le standard ISO 26262, ou encore le standard MISRA pour le langage C ainsi que la norme JSF-AV
(avionique en C++).
. Les standards de codage de la NASA recommandent d'éviter toute forme de récursion, cela fait partie de la
règle n°1, cf. The Power of Ten (pdf).
4 Exercices
1. Dis Bonjour ! : Écrire une fonction récursive bonjour(n) qui ache n fois le message Bonjour!.
2. Conversion en base b : Soit à déterminer la liste des chires de la représentation en base b d'un entier n.
Par exemple, si n = 13 et b = 2 alors les chires de la représen-
tation de n en base b sont les éléments de la liste [1, 1, 0, 1]
puisque 13 = 8 + 4 + 0 + 1. Autre exemple et qui permet de mieux
comprendre : la liste des chires en base 10 de l'entier 2038 est
[2, 0, 3, 8].
On observe alors que le reste r n'est autre que le dernier chire de
n et que le quotient q n'est autre que l'entier n privé de son dernier
chire. On peut donc reconstituer la liste des chires de n à partir
de celle de q et de celle de r. Dans notre exemple, et avec la syntaxe
Python des listes, on a [2, 0, 3, 8] = [2, 0, 3] + [8].
Complétez les lignes 3 et 4 du code ci-dessous avec le cas de base (condition d'arrêt)
1 def c h i f f r e s ( n , b ) :
2 # Manque le cas de base
3 .........
4 ..........
5 q= n // b
6 r = n % b
7 return c h i f f r e s ( q , b ) + [ r ]
5 Exercices Complémentaires
Vous trouverez tous les exercices complémentaires à rendre dans les notebooks :
. T2.2.1 Applications de la récursivité.
. T2.2.2 Pour aller plus loin avec la récursivité