public class Fib { public static int compteur; public static int fib(String prefix,int n) { // System.out.println(prefix+"fib("+n+")"); if (n==0) return 1; if (n==1) return 1; compteur++; return fib(prefix+" ",n-1)+fib(prefix+" ",n-2); } public static int []memo; public static int fibMemo(String prefix,int n) { // System.out.println(prefix+"fib("+n+")"); if (n==0) return 1; if (n==1) return 1; compteur++; if (memo[n-2]==0) { memo[n-2] = fibMemo(prefix+" ",n-2); } if (memo[n-1]==0) { memo[n-1] = fibMemo(prefix+" ",n-1); } return memo[n-1]+memo[n-2]; } public static void main(String []a) { for (int i=0; i<20; i++) { compteur = 0; System.out.println("Fib("+i+")="+fib("",i)+" compteur="+compteur); } memo = new int[7]; // 0 valeur pas encore calculée, >0 valeur déjà calculée compteur = 0; System.out.println("Fib(6)="+fibMemo("",6)+" compteur="+compteur); } }