Formation I.S.N.

Compter

Exercice : compter

É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.

  1. Appel : compte(5).
  2. Dans l'exécution de compte(5), la fonction compte est appelée avec l'argument 4.
  3. On exécute donc compte(4). Dans cette exécution, on appelle compte avec la valeur 3 pour le paramètre.
  4. On exécute donc compte(3). Dans cette exécution, on appelle compte avec la valeur 2 pour le paramètre.
  5. On exécute donc compte(2). Dans cette exécution, on appelle compte avec la valeur 1 pour le paramètre.
  6. On exécute donc compte(1). Dans cette exécution, on appelle compte avec la valeur 0 pour le paramètre.
  7. On exécute donc compte(0). L'exécution de compte(0) ne fait rien (c'est le sens de l'instruction pass).
  8. 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.
  9. 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.
  10. 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.
  11. 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.
  12. 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.
  13. L'exécution de compte(5) est donc terminée.