View Javadoc

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