Aller au contenu

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)
def factorielle(n):
    if n == 0:       # cas de base
        return 1
    return n * factorielle(n - 1)   # cas récursif

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 .py avec fonctions/classes réutilisables
  • import module puis module.fonction()
  • from module import f puis f() 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.