我有两种使用Scala查找factorial的方法。我想找出与尾递归方式相比有多慢的非尾递归方式。
// 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代码。基本上,你如何在Scala中编写Time.now
代码?
答案 0 :(得分:3)
您可以使用提供计算当前时间的方法的java.lang.System
类:
currentTimeMillis
表示当前时间(毫秒)nanoTime
表示当前时间(以纳秒为单位)(现建议)。但是,编写好的微基准测试非常困难,建议依赖于此框架。 Caliper非常好,有一个nice template for projects in scala。
答案 1 :(得分:0)
您可以使用Scala包装器方法scala.compat.Platform.currentTime
将该调用转发至System.currentTimeMillis
。