github.com/packtpublishing/learning-functional-programming-in-go@v0.0.0-20230130084745-8b849f6d58c4/Chapter01/02_fib/02_memoize.go (about) 1 package fib 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 n += 1 19 fibMem = Memoize(func(n int) int { 20 if n == 0 || n == 1 { 21 return n 22 } 23 return fibMem(n - 2) + fibMem(n - 1) 24 }) 25 return fibMem(n) 26 }