View Javadoc

1   package com.dvp.tutoriel.fibonacci;
2   
3   import java.util.Map;
4   
5   public class MaCalculette4 implements Calculette {
6   
7   	private static Map<Integer, Long> map;
8   
9   	// Singleton (initialisation directe)
10  	private static MaCalculette4 instance = new MaCalculette4();
11  	
12  	private MaCalculette4 () {
13  		FibonacciDao dao = new FibonacciDao();
14  		map = dao.charger();
15  	}
16  	
17  	public static synchronized MaCalculette4 getInstance() {
18  		return instance;
19  	}
20  	
21  	@Override
22  	public Long fibonacci(Integer n) {
23  
24  		// REGLE RG024.4
25  		if (n <= 0) {
26  			throw new IllegalArgumentException("On ne calcule que pour des nombres positifs");
27  		}
28  
29  		// REGLE RG024.1 : f(1) = 1
30  		// REGLE RG024.2 : f(2) = 1
31  		if (n == 1 || n == 2) {
32  			return 1L;
33  		}
34  
35  		// REGLE RG024.5
36  		// REGLE RG024.6
37  		Long valeur = map.get(n);
38  		if (valeur != null) {
39  			return valeur;
40  		}
41  
42  		// REGLE RG024.3.x
43  		valeur = fibonacci(n - 1) + fibonacci(n - 2);
44  		map.put(n, valeur);
45  		return valeur;
46  
47  	}
48  
49  }