재귀호출을 할 때, 메모이제이션을 이용하면

프로그램이 사용하는 메모리가 증가하지만,

밴복적인 함수 호출 시

재귀호출 횟수를 줄여 더 빠른 함수 값을 얻을 수 있다.


많은 함수형 프로그램들이 메모이제이션을 쉽게할 수 있도록 함수를 제공하지만(클로저, 그루비 : memoize 제공),

스칼라는 직접적으로 제공하지 않는다.


하지만, 다음과 같은 방법으로 memoize() 를 간단하게 구현할 수 있다.




def memoize[A, B](func: A => B) = new (A => B){
  val cache = scala.collection.mutable.Map[A, B]()
  def apply(x: A): B = cache.getOrElseUpdate(x, func(x))
}

def hashFunc = memoize(hash)



+ Recent posts