0

我有两种使用 Scala 查找阶乘的方法。我想知道与尾递归方式相比,非尾递归方式慢了多少。

// factorial non-tail recursive
def fact1(n: Int): Int =
  if (n==0) 1
  else n*fact(n-1)       

// factorial tail recursive
def fact(n: Int): Int = {
  def loop(acc: Int, n:Int): Int =
    if (n==0) acc
    else loop(acc*n, n-1)
  loop(1, n)
}

// a1 = Time.now
fact1(100)
// a2 = Time.now
// a2-a1

// b1 = Time.now
fact(100)
// b2 = Time.now
// b2-b1

我刚刚为 Time.now 编写了 Ruby 代码。基本上,您将如何Time.now在 Scala 中编写类似的代码?

4

2 回答 2

3

您可以使用java.lang.System提供计算当前时间的方法的类:

  • currentTimeMillis当前时间(以毫秒为单位)
  • nanoTime以纳秒为单位的当前时间(现在推荐)。

但是,编写好的微基准非常困难,建议依靠框架来实现。Caliper 非常好,并且在 scala 中有一个很好的项目模板

于 2012-10-03T06:18:16.273 回答
0

您可以使用 Scala 包装器方法scala.compat.Platform.currentTime将调用转发到System.currentTimeMillis.

于 2012-10-03T08:12:36.597 回答