您的实现不适用于任何体面的数字,因为它会使堆栈溢出。
我看不出在这里使用递归的任何理由。递归很漂亮,但通常比较重(取决于语言)。这是一个带有简单
for循环的有效实现:
private static BigInteger[] fibTmp = {BigInteger.ZERO, BigInteger.ONE};private static int maxCached = 1;public static BigInteger fibonacci(int v) { if (fibTmp.length<=v) { fibTmp = Arrays.copyOf(fibTmp, v*5/4); } for (; maxCached<v;) { maxCached++; BigInteger v1 = fibTmp[maxCached - 1]; BigInteger v2 = fibTmp[maxCached - 2]; fibTmp[maxCached] = v1.add(v2); } return fibTmp[v];}这是直接实现,而无需在文献中寻找有效的斐波那契算法。你最好找他们。
还要注意,这种基于缓存的实现会占用大量内存,并且只有多次调用该函数才有意义。



