I am working on a class project to create a more efficient Fibonacci than the recursive version of Fib(n-1) + Fib(n-2). For this project I need to use BigInteger. So far I have had the idea to use a map to store the previous fib numbers.  
public static BigInteger theBigFib(BigInteger n) {
    Map<BigInteger, BigInteger> store = new TreeMap<BigInteger, BigInteger>(); 
    if (n.intValue()<= 2){
        return BigInteger.ONE;
    }else if(store.containsKey(n)){         
        return store.get(n);    
    }else{
        BigInteger one = new BigInteger("1");
        BigInteger two = new BigInteger("2");
        BigInteger val = theBigFib(n.subtract(one)).add(theBigFib(n.subtract(two)));
        store.put(n,val);           
        return val;
    }
} 
I think that the map is storing more than it should be. I also think this line
BigInteger val = theBigFib(n.subtract(one)).add(theBigFib(n.subtract(two)));
is an issue. If anyone could shed some light on what i'm doing wrong or possible another solution to make it faster than the basic code. Thanks!
 
     
     
    