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  }