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

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