我看不出在这里使用递归的任何理由。递归很漂亮,但通常比较重(取决于语言)。这是一个带有简单
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];}
这是直接实现,而无需在文献中寻找有效的斐波那契算法。你最好找他们。
还要注意,这种基于缓存的实现会占用大量内存,并且只有多次调用该函数才有意义。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)