madamasterclass.com

📔 Récursivité

Exploration de la récursivité en python

La récursivité est un concept puissant en programmation où une fonction s'appelle elle-même pour résoudre un problème de manière itérative. En Python, la récursivité est souvent utilisée pour résoudre des problèmes complexes de manière élégante. Explorez les principes fondamentaux de la récursivité à travers ce cours.

1. Introduction à la récursivité

La récursivité consiste en une fonction qui s'appelle elle-même dans sa propre définition. Cela permet de diviser un problème en sous-problèmes plus simples. Un exemple classique est la fonction factorielle :

def factorielle(n):
if n == 0 or n == 1:
return 1
else:
return n * factorielle(n - 1)

La fonction factorielle calcule le produit de tous les entiers de 1 à \(n\), démontrant le concept de récursivité.

2. Principes fondamentaux

La maîtrise des principes fondamentaux de la récursivité est essentielle pour utiliser cette technique de manière efficace. Explorez ces principes pour comprendre comment concevoir des fonctions récursives de manière structurée et logique.

2.1 Cas de base

Le cas de base est crucial dans une fonction récursive, car il indique quand l'algorithme doit s'arrêter et ne pas faire d'autres appels récursifs. Dans le cas de la fonction factorielle, le cas de base est lorsque \(n\) est égal à 0 ou 1 :

def factorielle(n):
if n == 0 or n == 1:
return 1
else:
return n * factorielle(n - 1)

Le cas de base assure que la récursion se termine lorsque \(n\) atteint 0 ou 1, évitant ainsi une boucle infinie d'appels récursifs.

2.2 Appels récursifs

Les appels récursifs décomposent le problème en sous-problèmes plus simples. Dans le cas de la fonction factorielle, l'appel récursif est \(n \times \text{factorielle}(n-1)\) :

def factorielle(n):
if n == 0 or n == 1:
return 1
else:
return n * factorielle(n - 1)

Chaque appel récursif réduit le problème initial à un problème plus petit, convergeant finalement vers le cas de base.

2.3 Mémoire de la pile d'appels

Lorsqu'une fonction est appelée récursivement, chaque appel est ajouté à la pile d'appels. Il est important de comprendre que cela peut consommer de la mémoire, en particulier pour des problèmes de taille significative. Cependant, Python gère cela avec sa propre pile d'appels limitée.

2.4 Exemple : Somme des Éléments d'une Liste
def somme_liste(liste):
if not liste:
return 0
else:
return liste[0] + somme_liste(liste[1:])

Cette fonction calcule la somme des éléments d'une liste en utilisant la récursivité. L'appel récursif réduit la liste à chaque étape jusqu'à ce qu'elle soit vide, atteignant ainsi le cas de base.

2.5 Exemple : Calcul de la puissance
def puissance(base, exposant):
if exposant == 0:
return 1
else:
return base * puissance(base, exposant - 1)

Cette fonction utilise la récursivité pour calculer la puissance d'un nombre. L'appel récursif réduit l'exposant jusqu'à atteindre le cas de base.

En comprenant ces principes fondamentaux, vous serez en mesure de concevoir des fonctions récursives efficaces et d'appliquer cette technique puissante à divers problèmes en programmation Python.

3. Exemples pratiques

La récursivité peut être appliquée à divers problèmes. Par exemple, la recherche binaire :

def recherche_binaire(liste, element, debut=0, fin=None):
if fin is None:
fin = len(liste) - 1

if debut > fin:
return -1

milieu = (debut + fin) // 2

if liste[milieu] == element:
return milieu
elif liste[milieu] < element:
return recherche_binaire(liste, element, milieu + 1, fin)
else:
return recherche_binaire(liste, element, debut, milieu - 1)

La fonction recherche_binaire utilise la récursivité pour effectuer une recherche binaire dans une liste triée.

4. Avantages et inconvénients

La récursivité offre une solution élégante à certains problèmes, mais elle peut également présenter des inconvénients tels que l'utilisation de la pile. Il est essentiel de comprendre quand utiliser la récursivité de manière efficace.

Explorez davantage la puissance de la récursivité en résolvant divers problèmes et en vous familiarisant avec ses applications pratiques en programmation Python.

𝔼𝕩𝕖𝕣𝕔𝕚𝕔𝕖𝕤 𝕤𝕦𝕣 𝕝𝕒 𝕣𝕖́𝕔𝕦𝕣𝕤𝕚𝕧𝕚𝕥𝕖́ 𝕖𝕟 ℙ𝕪𝕥𝕙𝕠𝕟

Exercice 1 : Factorielle

Écrivez une fonction récursive en Python pour calculer la factorielle d'un nombre \(n\).

⌨️  
def factorielle(n):
if n == 0 or n == 1:
return 1
else:
return n * factorielle(n - 1)

Testez la fonction avec \(n = 5\) :

resultat = factorielle(5)
print("Factorielle de 5 :", resultat)

Exercice 2 : Somme des éléments d'une liste

Écrivez une fonction récursive en Python pour calculer la somme des éléments d'une liste.

⌨️  
def somme_liste(liste):
if not liste:
return 0
else:
return liste[0] + somme_liste(liste[1:])

Testez la fonction avec la liste [1, 2, 3, 4, 5] :

resultat = somme_liste([1, 2, 3, 4, 5])
print("Somme des éléments de la liste :", resultat)

Exercice 3 : Calcul de la puissance

Écrivez une fonction récursive en Python pour calculer \(a^n\), où \(a\) est la base et \(n\) est l'exposant.

⌨️  
def puissance(base, exposant):
if exposant == 0:
return 1
else:
return base * puissance(base, exposant - 1)

Testez la fonction avec \(a = 2\) et \(n = 3\) :

resultat = puissance(2, 3)
print("2^3 :", resultat)

Exercice 4 : Fibonacci

Écrivez une fonction récursive en Python pour calculer le \(n\)-ième terme de la suite de Fibonacci. La suite de Fibonacci commence par 0 et 1, et chaque terme suivant est la somme des deux précédents.

⌨️  
def fibonacci(n):
if n == 0:
return 0
elif n == 1:
return 1
else:
return fibonacci(n - 1) + fibonacci(n - 2)

Testez la fonction avec \(n = 6\) :

resultat = fibonacci(6)
print("Fibonacci(6) :", resultat)

Exercice 5 : Calcul de la combinaison

Écrivez une fonction récursive en Python pour calculer le coefficient binomial, également appelé combinaison. La combinaison de \(n\) éléments pris \(k\) à la fois est donnée par \(\binom{n}{k} = \frac{n!}{k!(n-k)!}\).

⌨️  
def combinaison(n, k):
if k == 0 or k == n:
return 1
else:
return combinaison(n - 1, k - 1) + combinaison(n - 1, k)

Testez la fonction avec \(n = 5\) et \(k = 2\) :

resultat = combinaison(5, 2)
print("Combinaison(5, 2) :", resultat)
Exercice 6 : Recherche d'un élément dans un arbre binaire

Écrivez une fonction récursive en Python pour rechercher la présence d'un élément dans un arbre binaire. Utilisez une structure de données représentant un nœud d'arbre binaire :

⌨️  
class Noeud:
def __init__(self, valeur):
self.valeur = valeur
self.gauche = None
self.droite = None

def recherche_arbre_binaire(arbre, element):
if arbre is None:
return False
if arbre.valeur == element:
return True
return recherche_arbre_binaire(arbre.gauche, element) or recherche_arbre_binaire(arbre.droite, element)

Créez un arbre binaire et testez la fonction avec un élément existant et un élément inexistant.


Exercice 7 : Tri Récursif

Écrivez une fonction de tri récursif en Python. Vous pouvez choisir parmi des algorithmes tels que le tri fusion ou le tri rapide. Appliquez le tri à une liste non triée :

⌨️  
def tri_rapide(liste):
if len(liste) <= 1:
return liste
pivot = liste[len(liste) // 2]
inferieur = [x for x in liste if x < pivot]
egal = [x for x in liste if x == pivot]
superieur = [x for x in liste if x > pivot]
return tri_rapide(inferieur) + egal + tri_rapide(superieur)

Testez la fonction avec une liste non triée :

liste_non_triee = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5]
liste_triee = tri_rapide(liste_non_triee)
print("Liste triée :", liste_triee)

Ces exercices plus avancés vous permettront de renforcer vos compétences en résolution de problèmes récursifs en Python.


Exercice 8 : Inversion d'une Chaîne

Écrivez une fonction récursive en Python qui inverse une chaîne de caractères. La fonction prend une chaîne en entrée et retourne la chaîne inversée :

⌨️  
def inverser_chaine(chaine):
if len(chaine) == 0:
return ""
return chaine[-1] + inverser_chaine(chaine[:-1])

Testez la fonction avec une chaîne :

chaine = "Python"
chaine_inversee = inverser_chaine(chaine)
print("Chaîne inversée :", chaine_inversee)

Exercice 9 : Compte des Voyelles

Écrivez une fonction récursive en Python qui compte le nombre de voyelles dans une chaîne de caractères. La fonction retourne le nombre de voyelles :

⌨️  
def compter_voyelles(chaine):
if len(chaine) == 0:
return 0
if chaine[0] in "aeiouAEIOU":
return 1 + compter_voyelles(chaine[1:])
return compter_voyelles(chaine[1:])

Testez la fonction avec une chaîne :

chaine = "Hello, World!"
nombre_voyelles = compter_voyelles(chaine)
print("Nombre de voyelles :", nombre_voyelles)

Exercice 10 : Produit des Éléments d'une Liste

Écrivez une fonction récursive en Python qui calcule le produit des éléments d'une liste. La fonction retourne le produit :

⌨️  
def produit_liste(liste):
if len(liste) == 0:
return 1
return liste[0] * produit_liste(liste[1:])

Testez la fonction avec une liste :

liste = [1, 2, 3, 4]
produit = produit_liste(liste)
print("Produit des éléments :", produit)

Forum(s) associé(s)

Mathématiques Magiques : Dévoilez les Mystères des Nombres

08 Apr, 2016

Les mathématiques ont souvent la réputation d'être une discipline austère et difficile, mais ...

Read more.

Voyage à Travers les Suites Numériques : Découvertes et Applications

27 Jan, 2014

Plongez dans l'univers fascinant des suites numériques, où chaque terme révèle des patterns surprenants et des applications pratiques dans les mathématiques et au-delà.

Read more.

Fonctions en Action : Comprendre et Explorer les Relations Mathématiques

30 Feb, 2015

Découvrez comment les fonctions tissent des liens entre les nombres et les concepts, transformant des idées abstraites en outils puissants pour résoudre des problèmes du quotidien.

Read more.
Page: