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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 ).
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

Merci , j éspère avoir été clair .