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 }