Algorithme factorielle recursive
Bonjour ,
j ' ai assez galéré pour écrire la méthode récursive permettant le calcul d' une factorielle.
Cependant je comprends bien l ' empilage (je sais pas si ça se dit) mais j ' ai du mal à comprendre comment se réaliser le désempilage.
J' ai mis la méthode dans une classe à part .
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| public class Utilitaires {
1-public static long facrec (long n ){
2- long resultat ;
3- System.out.println ("*** Entree dans factrec : n = " + n );
4- if ( n <= 1){
5- resultat = 1;
6- }else {
7- System.out.print("n = " + n);
8- resultat = facrec (n-1) * n ;
9- }
10- System.out.println ("***Sortie de facrec : resultat = " + resultat + " n = "+ n);
11- return resultat;
12- }//fin methode
} |
Procédure main (appel de la méthode)
Code:
1 2 3 4 5 6 7 8 9
| public class TestFacrec2 {
public static void main (String [] args){
int nombre;
System.out.print( " Saisir un nombre entier positif ou nul : ");
nombre = Lire.entierInt();
System.out.print( " Sa factorielle est : " + Utilitaires.facrec(nombre));
}
} |
Questions :
1-En fait j ' aimerai bien comprendre le fonctionnement , comment se réalise le désempilement (ou age :lol:).
2 -en l exécutant , je suis assez étonné de constater que l ' instruction de la ligne 10 est exécutée plusieurs fois , je ne comprends pas comment ceci se produit.
3-En rentrant un nombre négatif , le résultat est de 1 , je suis assez nul en math mais la factorielle d ' un nombre négatif ce n ' est pas possible :mouarf:
Merci , j éspère avoir été clair .