github.com/l3x/learn-fp-go@v0.0.0-20171228022418-7639825d0b71/1-functional-fundamentals/ch01-pure-fp/02_fib/src/fibonacci/memoize.go_ORIG (about)

     1  package fibonacci
     2  
     3  func Memoize(mf Memoized) Memoized {
     4  	cache := make(map[int]int)
     5  	return func(key int) int {
     6  		if val, found := cache[key]; found {
     7  			return val
     8  		}
     9  		temp := mf(key)
    10  		cache[key] = temp
    11  		return temp
    12  	}
    13  }
    14  
    15  type Memoized func(int) int
    16  var fibMem Memoized
    17  func FibMemoized(n int) int {
    18  	fibMem = Memoize(func(x int) int {
    19  		if x == 0 {
    20  			return 0
    21  		} else if x <= 2 {
    22  			return 1
    23  		} else {
    24  			return fibMem(x-2) + fibMem(x-1)
    25  		}
    26  	})
    27  	return fibMem(n)
    28  }