scala - 在 Scala 中编写斐波那契函数的最快方法是什么?

标签 scala recursion fibonacci

我从 very simple one 开始研究了 Scala 中斐波那契函数的一些实现。 ,到more complicated ones .

我不完全确定哪一个最快。我倾向于认为使用记忆化的速度更快,但是我想知道为什么 Scala 没有原生记忆化。

任何人都可以启发我编写斐波那契函数的最佳、最快(且最干净)的方法吗?

最佳答案

最快的版本是在某种程度上偏离通常的添加方案的版本。计算速度非常快,在某种程度上类似于基于以下公式的快速二进制求幂:

F(2n-1) = F(n)² + F(n-1)²
F(2n) = (2F(n-1) + F(n))*F(n)

这是一些使用它的代码:

def fib(n:Int):BigInt = {
   def fibs(n:Int):(BigInt,BigInt) = if (n == 1) (1,0) else {
     val (a,b) = fibs(n/2)
     val p = (2*b+a)*a
     val q = a*a + b*b
     if(n % 2 == 0) (p,q) else (p+q,p)
   }
   fibs(n)._1
}

尽管这不是很优化(例如内部循环不是尾递归),但它会击败通常的附加实现。

关于scala - 在 Scala 中编写斐波那契函数的最快方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7388416/

相关文章:

javascript - javascript中的递归和返回值

c - 为什么 Haskell 的斐波那契数列比 C 慢?

algorithm - Apache Spark - 处理时态 RDD 上的滑动窗口

scala - 什么是生成 RSS 提要的好的 Scala 库?

c++ - c++ 阶乘程序中的递归

c++ - vector 中的删除函数不会删除指针?

scala - 使用 OFormat 序列化案例类时从 Play 应用程序收到警告

scala - 如何使用 Play 2.0 定义标签?

java - 为什么当我运行我的程序来计算所有偶数斐波那契数的总和时得到负输出?

python - python中的递归线程创建