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