I recently built a Fibonacci generator that uses recursion and hashmaps to reduce complexity. I am using the System.nanoTime() to keep track of the time it takes for my program to print 10000 Fibonacci number. It started out good with less than a second but gradually became slower and now it takes more than 4 seconds. Can someone explain why this might be happening. The code is down here-
import java.util.*;
import java.math.*;
public class FibonacciGeneratorUnlimited {
    static int numFibCalls = 0;
    static HashMap<Integer, BigInteger> d = new HashMap<Integer, BigInteger>();
    static Scanner fibNumber = new Scanner(System.in);
    static BigInteger ans = new BigInteger("0");
    public static void main(String[] args){
        d.put(0 , new BigInteger("0")); 
        d.put(1 , new BigInteger("1"));
        System.out.print("Enter the term:\t");
        int n = fibNumber.nextInt();
        long startTime = System.nanoTime();
        for (int i = 0; i <= n; i++) {
            System.out.println(i + " : " + fib_efficient(i, d));
        }
        System.out.println((double)(System.nanoTime() - startTime) / 1000000000);
    }
    public static BigInteger fib_efficient(int n, HashMap<Integer, BigInteger> d) {
        numFibCalls += 1;
        if (d.containsKey(n)) {
            return (d.get(n));
        } else {
            ans = (fib_efficient(n-1, d).add(fib_efficient(n-2, d)));
            d.put(n, ans);
            return ans;
        }
    }
}
 
     
     
     
     
    