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
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
25 if (n <= 0) {
26 throw new IllegalArgumentException("On ne calcule que pour des nombres positifs");
27 }
28
29
30
31 if (n == 1 || n == 2) {
32 return 1L;
33 }
34
35
36
37 Long valeur = map.get(n);
38 if (valeur != null) {
39 return valeur;
40 }
41
42
43 valeur = fibonacci(n - 1) + fibonacci(n - 2);
44 map.put(n, valeur);
45 return valeur;
46
47 }
48
49 }