fact(n)=n*fact(n-1)
De là il vous devient très facile d’écrire une fonction fact() récursive : 
Fonction fact(n:entier) :entier
Début
n←fact(n-1) 
Retourne n 
Fin
Cette  fonction  n’est  pas  complète  car  elle  va  s’exécuter  à  l’infini.  Il  n’y  a  pas  de  condition  d’arrêt.  Or,  le  calcul  doit 
continuer tant que n est supérieur à 1. Voici les passes successives pour une factorielle de 5 : 
q 1 ère  étape : 5>1 ? Oui : fact(5) appelle 5*fact(4)
 
q 2 ème  étape : 4>1 ? Oui : fact(4) appelle 4*fact(3)
 
q 3 ème  étape : 3>1 ? Oui : fact(3) appelle 3*fact(2)
 
q 4 ème  étape : 2>1 ? Oui : fact(2) appelle 2*fact(1)
 
q 5 ème  étape : 1>1 ? Non : fact(1) sort en retournant la valeur 1 à fact(2).
 
Est­ce fini ? Non ! Chaque fonction appelée se terminant retourne sa valeur au programme ou sous­programme l’ayant 
appelé. Donc ça continue : 
q 6 ème  étape : fact(2) : 2*fact(1)=2, retourne 2 à fact(3)
 
q 7 ème  étape : fact(3) : 3*fact(2)=6, retourne 6 à fact(4)
 
q 8 ème  étape : fact(4) : 4*fact(3)=24, retourne 24 à fact(5)
 
q 9 ème  étape : fact(5) : 5*fact(4)=120, retourne 120 au programme appelant.
 
Si vous suivez l’ordre des appels<­>retours vous obtenez le schéma suivant : 
Les allers­retours d’un appel récursif 
Un algorithme un peu plus correct de fact() est donc : 
Fonction fact(n :entier) :entier 
Début 
Si n>1 Alors 
n←n*fact(n-1) 
FinSi 
Retourne n 
Fin
- 2 -
© ENI Editions - All rigths reserved - Jonifar lina
142
Précédent

- 142/220

Suivant