0

Scala を使用して階乗を見つける方法は 2 つあります。非末尾再帰の方法が末尾再帰の方法と比較してどれだけ遅いかを知りたいです。

// 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.compat.Platform.currentTime呼び出しを に転送するScala ラッパー メソッドを使用できますSystem.currentTimeMillis

于 2012-10-03T08:12:36.597 に答える