有没有比这更好的方法(性能)来计算斐波那契?

有没有比这更好的方法(性能)来计算斐波那契?,第1张

有没有比这更好的方法(性能)来计算斐波那契?

您的实现不适用于任何体面的数字,因为它会使堆栈溢出。

我看不出在这里使用递归的任何理由。递归很漂亮,但通常比较重(取决于语言)。这是一个带有简单

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];}

这是直接实现,而无需在文献中寻找有效的斐波那契算法。你最好找他们。

还要注意,这种基于缓存的实现会占用大量内存,并且只有多次调用该函数才有意义。



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5010645.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-14
下一篇 2022-11-14

发表评论

登录后才能评论

评论列表(0条)

保存