Écrire une fonction python récursive :
Entrée | Un entier naturel n. |
---|---|
Sortie | L'affichage des entiers 1, 2, 3, ..., n. |
On fera en sorte que le cas de base (condition d'arrêt) soit énoncé pour l'entier 0.
- principe récursif
- une solution
- Si n = 0, on n'affiche rien et on stoppe.
- Si n > 0, on doit d'abord afficher les entiers entre 1 et n-1 avant d'afficher n. Autrement dit, on doit lancer le décompte pour l'entier n-1 puis afficher n.
Une solution Python :
def compte(n) :
if n <= 0 : pass
else :
compte(n-1)
print(n, end=" ")
compte(5)
On détaille l'exécution d'un appel de la fonction avec l'argument 5.
- Appel : compte(5).
- Dans l'exécution de compte(5), la fonction compte est appelée avec l'argument 4.
- On exécute donc compte(4). Dans cette exécution, on appelle compte avec la valeur 3 pour le paramètre.
- On exécute donc compte(3). Dans cette exécution, on appelle compte avec la valeur 2 pour le paramètre.
- On exécute donc compte(2). Dans cette exécution, on appelle compte avec la valeur 1 pour le paramètre.
- On exécute donc compte(1). Dans cette exécution, on appelle compte avec la valeur 0 pour le paramètre.
- On exécute donc compte(0).
L'exécution de compte(0) ne fait rien (c'est le sens de l'instruction
pass
). - L'exécution de compte(0) est terminée. Mais cette exécution a été lancée depuis l'exécution de compte(1), qui, elle,
n'est pas terminée puisqu'il restait une ligne à exécuter : la ligne
print(n, end=" ")
. Cette ligne est donc exécutée : la valeur 1 s'affiche à l'écran. - L'exécution de compte(1) est ainsi terminée (il n'y a plus aucune ligne d'instruction à exécuter). Mais
cette exécution de compte(1) avait été lancée depuis une exécution de compte(2). Et cette exécution de compte(2) n'est
pas terminée : il restait la ligne
print(n, end = " ")
à exécuter. Elle est donc exécutée, et 2 est donc imprimé à l'écran. - L'exécution de compte(2) est ainsi terminée (il n'y a plus aucune ligne d'instruction à exécuter). Mais
cette exécution de compte(2) avait été lancée depuis une exécution de compte(3). Et cette exécution de compte(3) n'est
pas terminée : il restait la ligne
print(n, end = " ")
à exécuter. Elle est donc exécutée, et 3 est donc imprimé à l'écran. - L'exécution de compte(3) est ainsi terminée (il n'y a plus aucune ligne d'instruction à exécuter). Mais
cette exécution de compte(3) avait été lancée depuis une exécution de compte(4). Et cette exécution de compte(4) n'est
pas terminée : il restait la ligne
print(n, end = " ")
à exécuter. Elle est donc exécutée, et 4 est donc imprimé à l'écran. - L'exécution de compte(4) est ainsi terminée (il n'y a plus aucune ligne d'instruction à exécuter). Mais
cette exécution de compte(4) avait été lancée depuis une exécution de compte(5). Et cette exécution de compte(5) n'est
pas terminée : il restait la ligne
print(n, end = " ")
à exécuter. Elle est donc exécutée, et 5 est donc imprimé à l'écran. - L'exécution de compte(5) est donc terminée.