Python — Programmation orientée objet et récursivité
1. Programmation Orientée Objet (POO)
La POO modélise les données sous forme d'objets (instances de classes) qui encapsulent des attributs (données) et des méthodes (fonctions).
Définition d'une classe
class Personne:
def __init__(self, nom, age): # Constructeur
self.nom = nom
self.age = age
def se_presenter(self): # Méthode
return f"Je m'appelle {self.nom} et j'ai {self.age} ans."
# Création d'un objet
p1 = Personne("Alice", 17)
print(p1.se_presenter()) # Affiche : Je m'appelle Alice et j'ai 17 ans.
Concepts clés
- Héritage : Une classe peut hériter d'une autre (ex:
class Eleve(Personne)). - Encapsulation : Les attributs sont protégés (ex:
self.__agepour un attribut privé). - Polymorphisme : Une méthode peut avoir plusieurs formes (ex: redéfinir
__str__).
2. Récursivité
Une fonction est récursive si elle s'appelle elle-même. Elle doit avoir :
- Un cas de base (arrêt de la récursion).
- Un cas récursif (appel à soi-même avec un problème simplifié).
Exemple : Factorielle
def factorielle(n):
if n == 0: # Cas de base
return 1
else: # Cas récursif
return n * factorielle(n - 1)
print(factorielle(4)) # Affiche 24 (4! = 4×3×2×1)
Pièges à éviter
- Boucle infinie : Oublier le cas de base.
- Stack overflow : Trop d'appels récursifs (ex:
ntrop grand).
3. Comparaison itératif vs récursif
| Itératif | Récursif |
|---|---|
Boucles (for, while) | Appels de fonction |
| Plus efficace en mémoire | Plus lisible pour certains problèmes |
| Exemple : calcul de factorielle avec une boucle | Exemple : tours de Hanoï |
Quand utiliser la récursivité ? Pour des problèmes naturellement récursifs (arbres, fractales, etc.).
4. Bonnes pratiques
- POO : Utiliser des noms de classes en
PascalCase(ex:CompteBancaire). - Récursivité : Toujours vérifier le cas de base et la simplification du problème.
- Tests : Vérifier les limites (ex:
n=0pour la factorielle).