Mathematics">
Chap 4 - Récursivité - Cours
Chap 4 - Récursivité - Cours
Chap 4 - Récursivité - Cours
1) Une première démarche serait de calculer la taille correspondante de la partie à découper 32 fois, de la dessiner
puis de découper.
2) Une seconde approche, convenant à ce cas concret (choix de 32), serait de couper la feuille en deux, puis de
recommencer avec chaque nouveau morceau.
Des grands parents viennent de planter un arbre de 15cm dans le jardin pour leur petit fils de 10 ans. Le
vendeur leur a dit qu’il allait grandir de 30cm chaque année. Quelle sera sa taille lorsque le petit fils aura
20 ans ?
Plusieurs approches peuvent être envisagées afin de trouver le résultat. Une des approches pourrait être la suivante :
Conversion en Binaire :
On divise le nombre par deux, on note son reste et on recommence la démarche avec le quotient jusqu’à ce que le
quotient soit égal à zéro.
Les fractales :
Page 1 sur 6
II. La récursivité :
En mathématiques, en informatique, en biologie, mais aussi dans notre quotidien, nous faisons souvent face à des
situations où un problème doit être résolu en utilisant une méthode de résolution qui est répétée plusieurs fois
exactement de la même manière.
De manière itérative, la méthode est appliquée par paliers de façon séquentielle, tandis que dans la récursivité, la
méthode s'appelle elle-même.
Voici de manière visuelle la différence d’exécution selon le mode itératif ou récursif (la méthode est ResoudrePbm) :
ResoudrePbm ResoudrePbm
. Contexte exécution – appel 1
Contexte exécution –
Boucle for ou while ayant N-Itérations
appel 1 ResoudrePbm
Contexte exécution – appel 2
ResoudrePbm
ResoudrePbm
Contexte exécution –
appel 2
...
.... ...
.. ResoudrePbm
ResoudrePbm Contexte exécution –
appel N
Contexte exécution –
appel N
A chaque itération, ResoudrePbm est A chaque itération, ResoudrePbm n’est pas encore
terminée. Le contexte d’exécution est terminée. Elle se terminera par cascade lorsque la
réinitialisé à chaque Itération. dernière itération sera finalisée. Le contexte d’exécution
de chaque appel est conservé jusqu’au niveau le plus bas.
Ainsi la récursivité peut être imaginée comme les poupées russes (matriochkas) : la plus
grande est l’appel lors de la première itération, et la plus petite la dernière itération.
Cette image permet aussi d’appréhender deux notions fondamentales en récursivité :
Il peut être également possible d’avoir deux fonctions (ou plus) qui s’appellent l’une l’autre, cette situation est
appelée : récursivité croisée.
Page 2 sur 6
La structure d’une Fonction Récursive, les éléments à prévoir lors de son écriture :
Condition d’arrêt (obligatoire) : qui correspond au cas de base, c’est-à-dire le cas où il n’y a
plus besoin d’appeler la fonction.
Ainsi, si valide, elle permet de sortir de la fonction (avec ou sans valeur retournée) sans
appeler une nouvelle fois la fonction
Un traitement, optionnel car il est dépendant de ce que doit résoudre la fonction récursive
Appel à elle-même (obligatoire) avec des valeurs de paramètres qui permettent d’obtenir, à
une certaine étape, la condition d’arrêt.
Page 3 sur 6
Nous obtenons alors l’algorithme suivant :
Fonction convertirEnNbreBinaire (nbre)
Si nbre = 0 alors retourner 0
Sinon
reste reste de la division euclidienne de nbre par 2
quotient quotient de la division euclidienne de nbre par 2
retourner reste concaténé à convertirEnNbreBinaire(quotient)
L’approche récursive :
Fonction calculerTaille ( n ) Condition de base (condition de fin)
Si n = 0 alors retourner 15 Calcul de la valeur à l’aide de la formule
t 30 + calculerTaille(n-1) récursive : 30 + taille année précédente
retourner t Fin d’exécution de la fonction en cours en
retournant la valeur courante
3. Autres exemples :
a. Factoriel d’un nombre entier 𝒏, noté 𝒏!
La factorielle de 𝑛, 𝑛! = 𝑛 × (𝑛 − 1) × … × 1, peut-être implémentée en mode récursif :
La version itérative est bien plus performante que la version récursive (coût des appels des fonctions et de la gestion
des contextes des variables pour chaque appel)
Page 4 sur 6
Exercices d’entrainements
Exercice 1 : L’arbre des grands-parents (Enoncé du cours)
1) Réaliser la fonction calculerTailleRecursif qui permet de calculer la taille de l’arbre. Le nombre d’années
sera entrée par l’utilisateur
2) Programmer une version itérative de cette situation : calculerTailleIteratif
3) Ajouter le code nécessaire afin de calculer le temps mis par chacune des fonctions et comparer les
résultats pour des nombres d’années différents.
Exercice 2 : Factoriel d’un nombre entier positif
1) Réaliser la fonction calculerFactRecursif qui calcule la factorielle d’un nombre entier positif entré par
l’utilisateur.
2) Réaliser la fonction calculerFactInteratif qui calcule la factorielle en mode itératif et comparer le temps
d’exécution des deux versions
Exercice 3 : Compte à rebours.
Ecrire une fonction récursive qui affiche le compte à rebours toutes les 20ms à partir d’un nombre entré par
l’utilisateur. NB : la fonction sleep(x) avec x en ms est une fonction de la bibliothèque time.
Exercice 4 : Palindrome.
Ecrire une fonction récursive qui vérifie si un mot est un palindrome. Ex : ressasser, stats, radar, abba, …
Exercice 5 : Que fait la fonction suivante :
def rFonction(x,n):
Reda propose la fonction suivante : que fait-elle ? if n == 0:
return 1
else:
return x * rFonction(x, n - 1)
return 1
A votre avis, quel est l’intérêt de la version elif n == 1:
proposée par Amina ?
return x
else:
r = uneFonction(x, n // 2)
if n % 2 == 0:
return r * r
else:
return x * r * r
Exercice 5 : Suite de Syracuse :
Réaliser la fonction récursive qui permet d’afficher les valeurs successives d’une suite tant que les termes sont
supérieurs strictement à 1. La suite (𝑢 ) est définie par :
Page 6 sur 6