public class Fact { public static int factIter(int n) { int f = 1; for (int i=1; i<=n; i++) { f = f*i; System.out.println("f="+f); } return f; } public static int factRec(int n) { if (n==0) return 1; int r = n*factRec(n-1); System.out.println(r); return r; } public static int factRecAcc(int n,int r) { System.out.println("factRecAcc("+n+","+r+")"); if (n==0) { System.out.println("return "+r); return r; } int res = factRecAcc(n-1,n*r); System.out.println("return "+res); return res; } public static int factRecAccPropre(int n,int r) { if (n==0) return r; return factRecAcc(n-1,n*r); } public static int factRecAccPropreIter(int n,int r) { while (n!=0) { r = n*r; n = n-1; } return r; /* for (n>=0; n--) { r = n*r; } */ } public static int factRecOriginelle(int n) { System.out.println("factRecOriginelle("+n+")"); if (n==0) { System.out.println("return 1"); return 1; } int r = n*factRecOriginelle(n-1); System.out.println("return "+r); return r; } public static void main(String []a) { // System.out.println(factIter(10)); System.out.println(factRecOriginelle(10)); System.out.println(factRecAcc(10,1)); } }