Assertions et récursivité
Sakina ZININI
CPGE Salmane Al Farissi - Salé / MPSI- 1TSI
2023 - 2024
1 Assertions
Introduction
Primitive assert
Schéma de fonctionnement
2 Récursivité
Introduction
Définitions et exemples
Type de récursivité
Sakina ZININI (CPGE Salmane Al Farissi - Salé / MPSI-Assertions
1TSI) et récursivité 2023 - 2024 2 / 27
Assertions
Sakina ZININI (CPGE Salmane Al Farissi - Salé / MPSI-Assertions
1TSI) et récursivité 2023 - 2024 3 / 27
Assertions Introduction
• La définition d’une fonction peut être immédiatement suivie par
une commentaire multiligne (""" comentaire""" ) appelée docs-
tring qui permet de documenter la fonction.
• La documentation inclus la précision des pré-conditions les post-
conditions et le traitement effectuée par la fonction.
• La documentation est accessible via la commande help (nom_fct).
Sakina ZININI (CPGE Salmane Al Farissi - Salé / MPSI-Assertions
1TSI) et récursivité 2023 - 2024 4 / 27
Assertions Introduction
• Le problème est que cela ne donne que des indications sur les
arguments de la fonction.
• Si une fonction est appelée avec des arguments d’un mauvais
type, elle peut aussi bien provoquer une erreur ou bien continuer
en renvoyant un résultat incohérent.
• L’un des moyens simples pour pallier ce problème est d’utiliser les
assertions.
Sakina ZININI (CPGE Salmane Al Farissi - Salé / MPSI-Assertions
1TSI) et récursivité 2023 - 2024 5 / 27
Assertions Primitive assert
Défintion
La primitive assert permet de contrôler qu’une expression renvoie True.
Dans le cas contraire, une exception AssertionError est levée.
• Elle est utilisée pour valider des pré-conditions et des post-conditions
à l’exécution du code d’une fonction.
• Une exception signifie un événement particulier qui provoque en
général l’interruption du déroulement normal d’un programme
donné.
• Lever une exception : c’est à dire interrompre le programme tout
en générant un type d’erreur : IndexError, KeyError, NameError,
ValueError, ZeroDivisionError et bien d’autres.
• On peut définir nos propres exceptions.
• Gestion des exceptions (hors programme).
Sakina ZININI (CPGE Salmane Al Farissi - Salé / MPSI-Assertions
1TSI) et récursivité 2023 - 2024 6 / 27
Assertions Primitive assert
• Syntaxe :
assert condition [, message d’erreur]
• Une exception de type AssertionError sera levée si la condition
s’évalue en False.
• Message d’erreur est optionnel. Il permet d’expliquer le problème
à gérer.
Sakina ZININI (CPGE Salmane Al Farissi - Salé / MPSI-Assertions
1TSI) et récursivité 2023 - 2024 7 / 27
Assertions Primitive assert
• Exemple 1 :
Sakina ZININI (CPGE Salmane Al Farissi - Salé / MPSI-Assertions
1TSI) et récursivité 2023 - 2024 8 / 27
Assertions Primitive assert
• Exemple 2 :
Sakina ZININI (CPGE Salmane Al Farissi - Salé / MPSI-Assertions
1TSI) et récursivité 2023 - 2024 9 / 27
Assertions Primitive assert
• Exemple 3 :
Sakina ZININI (CPGE Salmane Al Farissi - Salé / MPSI-Assertions
1TSI) et récursivité 2023 - 2024 10 / 27
Assertions Schéma de fonctionnement
Sakina ZININI (CPGE Salmane Al Farissi - Salé / MPSI-Assertions
1TSI) et récursivité 2023 - 2024 11 / 27
Assertions Schéma de fonctionnement
• L’instruction assert est assez pratique lorsque vous avez besoin de
documenter, déboguer et tester votre code pendant les phases de
développement de votre application Python.
• Les assertions peuvent être mal utilisées : validation des données,
gestion des erreurs de des utilisateurs, des opérations avec des
effets secondaires ! → Utiliser d’autres techniques à savoir la ges-
tion des exceptions et les instructions conditionnelles.
• Maintenir les assertions activées en production peut avoir un im-
pact négatif sur les performances de votre code (prendre du temps
et d’espace mémoire).→ Il est recommandé de les désactiver une
fois que vous avez un code robuste.
Sakina ZININI (CPGE Salmane Al Farissi - Salé / MPSI-Assertions
1TSI) et récursivité 2023 - 2024 12 / 27
Récursivité
Sakina ZININI (CPGE Salmane Al Farissi - Salé / MPSI-Assertions
1TSI) et récursivité 2023 - 2024 13 / 27
Récursivité Introduction
• La programmation itérative est une technique de programmation
qui utilise des boucles pour réaliser des répétition au niveau d’un
programme.
• La programmation récursive est une technique de programmation
qui remplace les instructions de boucle (while, for) par des appels
de fonction.
• Le choix entre ces deux techniques dépend du problème étudié,
des contraintes de performances, de la lisibilité du code et des
préférences du programmeur.
Sakina ZININI (CPGE Salmane Al Farissi - Salé / MPSI-Assertions
1TSI) et récursivité 2023 - 2024 14 / 27
Récursivité Définitions et exemples
Définition
Une fonction récursive est une fonction qui s’appelle elle-même.
Sakina ZININI (CPGE Salmane Al Farissi - Salé / MPSI-Assertions
1TSI) et récursivité 2023 - 2024 15 / 27
Récursivité Définitions et exemples
• Une fonction récursive est définie par : au moins un cas de base
et au moins un cas général.
• Cas de base : on décrit les cas pour lesquels le résultat de la
fonction est simple à calculer.
• Cas général ou (de récurrence) : La fonction est appelée récursi-
vement et le résultat retourné est calculé en utilisant le résultat
de l’appel récursif.
• A chaque appel récursif, la valeur d’au moins un des paramètres
(effectifs) de la fonction récursive doit changer.
• L’exécution d’une fonction récursive se fait par des appels suc-
cessifs à la fonction jusqu’à ce que le cas de base soit vérifiée, et
à chaque appel, les valeurs des paramètres et l’adresse de retour
sont empilés dans la pile d’exécution.
Il faut toujours s’assurer que chaque cas de récurrence converge vers
un cas de base.
Sakina ZININI (CPGE Salmane Al Farissi - Salé / MPSI-Assertions
1TSI) et récursivité 2023 - 2024 16 / 27
Récursivité Définitions et exemples
Définition
Une pile d’exécution permet d’enregistrer des informations sur les fonc-
tions en cours d’exécution dans un programme.
Lors de l’appel d’une fonction, Un bloc est créé pour la fonction Conte-
nant :
• Les arguments de la fonction.
• Une place pour écrire la valeur de retour.
• L’adresse de retour.
• de la place pour les variables locales
• ... etc.
Sakina ZININI (CPGE Salmane Al Farissi - Salé / MPSI-Assertions
1TSI) et récursivité 2023 - 2024 17 / 27
Récursivité Définitions et exemples
• Un bloc de la fonction appelée est créé au dessus du bloc de la
fonction appelante.
• Ces blocs sont empilés dans la pile d’exécution.
Sakina ZININI (CPGE Salmane Al Farissi - Salé / MPSI-Assertions
1TSI) et récursivité 2023 - 2024 18 / 27
Récursivité Définitions et exemples
Exemple : pour comprendre la pile d’exécution :
Sakina ZININI (CPGE Salmane Al Farissi - Salé / MPSI-Assertions
1TSI) et récursivité 2023 - 2024 19 / 27
Récursivité Définitions et exemples
Lors de l’appel de f(5) :
Pour simplicité : utiliser l’arbre des appels récursifs.
Sakina ZININI (CPGE Salmane Al Farissi - Salé / MPSI-Assertions
1TSI) et récursivité 2023 - 2024 20 / 27
Récursivité Définitions et exemples
Exemple : Fonction récursive permet de calculer le factoriel d’un en-
tier.
• Formule de calcul de factoriel : n!.
• Cas de base : n! = 1, pour n ∈ {0, 1}.
• Cas général : n! = n × (n − 1)!.
Sakina ZININI (CPGE Salmane Al Farissi - Salé / MPSI-Assertions
1TSI) et récursivité 2023 - 2024 21 / 27
Récursivité Définitions et exemples
Arbre des appels récursives de l’appel factorial(4) :
Sakina ZININI (CPGE Salmane Al Farissi - Salé / MPSI-Assertions
1TSI) et récursivité 2023 - 2024 22 / 27
Récursivité Type de récursivité
Parmi les types de récursivité, on cite :
• Récursivité simple : Une fonction récursive contient un seul appel
récursif.
• Récursivité multiple : Une fonction récursive contient plus d’un
appel récursif
• Récursivité croisée : Des fonctions qui s’appellent l’une l’autre.
Sakina ZININI (CPGE Salmane Al Farissi - Salé / MPSI-Assertions
1TSI) et récursivité 2023 - 2024 23 / 27
Récursivité Type de récursivité
Récursivité simple
(
1 si n = 0
u(n) =
u(n − 1) + 1 si n ≥ 1
Sakina ZININI (CPGE Salmane Al Farissi - Salé / MPSI-Assertions
1TSI) et récursivité 2023 - 2024 24 / 27
Récursivité Type de récursivité
Récursivité multiple
(
1 si n ∈ {0, 1}
fibonacci(n) =
fibonacci(n − 1) + fibonacci(n − 2) si n ≥ 2
Sakina ZININI (CPGE Salmane Al Farissi - Salé / MPSI-Assertions
1TSI) et récursivité 2023 - 2024 25 / 27
Récursivité Type de récursivité
Récursivité croisée
(
Vrai si n = 0
paire(n) =
impaire(n − 1) si n ≥ 1
(
Faux si n = 0
impaire(n) =
paire(n − 1) si n ≥ 1
Sakina ZININI (CPGE Salmane Al Farissi - Salé / MPSI-Assertions
1TSI) et récursivité 2023 - 2024 26 / 27
Récursivité Type de récursivité
Récursivité croisée
Sakina ZININI (CPGE Salmane Al Farissi - Salé / MPSI-Assertions
1TSI) et récursivité 2023 - 2024 27 / 27