Fiche de révision - Langages et programmation¶
1. Récursivité¶
- Fonction récursive : s'appelle elle-même
- Cas de base : condition d'arrêt (résultat direct)
- Cas récursif : appel avec paramètres plus proches du cas de base
- Pile d'appels : chaque appel est empilé, dépilé au retour
- Limite Python : 1 000 appels par défaut (
RecursionError)
Terminaison : identifier un variant (entier positif qui décroît strictement).
2. Calculabilité et décidabilité¶
| Concept | Définition |
|---|---|
| Programme = donnée | Un programme est un fichier manipulable par d'autres programmes |
| Calculabilité | Ce qui peut être calculé par un algorithme |
| Décidabilité | Problème admettant un algorithme qui répond oui/non dans tous les cas |
| Problème de l'arrêt | Indécidable : aucun programme ne peut dire si tout programme termine |
| Thèse de Church-Turing | Tous les langages complets sont équivalents en puissance de calcul |
3. Modularité¶
- Module : fichier
.pyavec fonctions/classes réutilisables import modulepuismodule.fonction()from module import fpuisf()directement__name__ == "__main__": code exécuté seulement si le fichier est lancé directement- API : interface publique d'une bibliothèque
4. Paradigmes de programmation¶
| Paradigme | Principe | Outils Python |
|---|---|---|
| Impératif | Séquence d'instructions modifiant l'état | for, while, =, if |
| Fonctionnel | Composition de fonctions pures | map, filter, lambda, compréhensions |
| Objet | Objets encapsulant données et comportements | class, self, méthodes |
Python est multi-paradigme : on peut mélanger les trois styles.
5. Mise au point et bugs¶
| Bug | Cause | Prévention |
|---|---|---|
| Typage | "5" + 3 → TypeError |
Convertir avec int(), str() |
| Effet de bord | Modification d'une liste argument | Travailler sur une copie |
| Débordement | tab[len(tab)] → IndexError |
range(len(tab)) |
| Condition non exhaustive | if/elif sans else |
Toujours prévoir le else |
| Off-by-one | < au lieu de <= |
Tester les bornes |
| Flottants | 0.1 + 0.2 != 0.3 |
abs(a - b) < epsilon |
| Nommage | Variables confuses | Noms explicites |
Techniques de débogage : print(), assertions, docstrings, jeux de tests, débogueur.