2012-10-03 51 views
0

我有兩種使用Scala找到階乘的方法。我想知道非尾遞歸方式比尾遞歸方式慢多少。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代碼。基本上,你會如何在Scala中編寫類似代碼Time.now

回答

3

可以使用java.lang.System類,它提供了計算當前時間的方法:

  • currentTimeMillis以毫秒爲單位
  • nanoTime在納秒當前時間(這是目前推薦)當前時間。

但是,編寫好的微基準是非常困難的,因此建議依賴於該框架。卡尺是非常好的,有一個nice template for projects in scala

+0

'nanoTime'對我的情況非常有用。 –

0

您可以使用斯卡拉包裝方法scala.compat.Platform.currentTime轉發呼叫System.currentTimeMillis

+0

使用包裝器而不是java方法的背後是什麼? – simbo1905

+0

如果您使用包裝器,並且稍後決定將代碼移植到ScalaJS或其他目標,它仍然可以工作。 – axel22