Existe uma maneira melhor (performance) calcular o fibonacci do que este?

Eu fiz este código .. E eu preciso para obter o melhor dele .. Eu realmente preciso do melhor desempenho de calcular números de fibonacci .. por favor, ajudem ser ..

Eu li algum código desse tipo de cálculo e acho que consegui o melhor deles ..

Avalie isso para mim .. plz ..

ps: E eu realmente preciso do BigInteger .. Vou calcular o Fibonacci de números enormes

ps2: Eu calculei alguns números grandes com este algoritmo e obtive um ótimo tempo de resposta ... mas eu preciso saber se poderia ser melhor

ps3: para rodar esse código você precisará usar esse argumento de VM-Xss16384k (Tamanho da pilha)

public class Fibonacci {

    private static BigInteger[] fibTmp = { BigInteger.valueOf(0), BigInteger.valueOf(1) };

    public static BigInteger fibonacci(long v) {

        BigInteger fib = BigInteger.valueOf(0);

        if (v == 1) {

            fib = BigInteger.valueOf(1);

        } else if (v == 0) {

            fib = BigInteger.valueOf(0);

        } else {

            BigInteger v1 = fibonacci(v - 1);
            BigInteger v2 = fibTmp[(int) (v - 2)];

            fib = v1.add(v2);
        }

        synchronized (fibTmp) {

            if (fibTmp.length - 1 < v)
                fibTmp = Arrays.copyOf(fibTmp, (int) (v + 10));

            fibTmp[(int) v] = fib;
        }

        return fib;
    }
}