纯记忆函数

纯记忆函数

使用闭包解决重复计算的性能开销

1.斐波纳列数列

type memoizeFunction func(int,...int) interface{}
var Fibonacci memoizeFunction
func init() {
        Finonacci = Memoize(func (x int,xs ...int) interface{ }{
              if x< 2{
                  return x
              }
              return Fibonacci(x-1).(int) + Fibonacci(x-2).(int)
        } )
 }```

func Memoize(function memoizeFunction) memoizeFunction {
cache := make(map[string] interface{})
return func(x int,xs ...int) interface{} {
key := fmt.Sprint(x)
for _,i := range xs {
key += fmt.Sprintf(",%d",i)
}
if value,found := cache[key];found {
return value;
}
value := function(x,xs....)
cache[key] = value
return value
}
}```

2.整数转换成罗马数字

var RomanForDecimal memoizeFunction
func init() {
       decimail := [] int{1000,900,500,400,100,90,40,10,9,5,4,1}
       romans :=[]string{"M","CM","D","CD","C","XC","L","XL","X","IX","V","IV","I"} 
       RomanForDecimal = memoize(func(x int,xs ...int) interface{} {
                if x<0 || x>3999 {
                        panic("RomanForDecimal() only handles integers [0,3999]")
                 }
                 var  buffer bytes.Buffer
                 for i,decimal := range decimals {
                       remainder := x / decimal
                       x %= decimal
                       if remainder > 0 {
                            buffer.WriteString(strings.Repeat(romans[i],remainder))
                       }
                  }
                  return buffer.String()
         })
 }```
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 前言 人生苦多,快来 Kotlin ,快速学习Kotlin! 什么是Kotlin? Kotlin 是种静态类型编程...
    任半生嚣狂阅读 26,252评论 9 118
  • 集自耳朵里的博物馆日签
    辽Atom阅读 525评论 0 3
  • 云薄雨细梅子黄, 炉上酒沸闲人忘。 葡萄架下闻私语, 夜澜风起任秋凉。
    云高不慕阅读 207评论 2 6
  • 周一到了单位同事阿猫顶着两个黑眼圈,向我哭诉:“你说作为一个成年人, 不经常去麻烦别人,人人都自觉一些,这个世界会...
    半岛铁盒0阅读 871评论 0 0
  • 对长寿节目的理解: 所谓长寿节目是一开始不知道会长久 是想着要不要我去做一下试一试之类的 不行就算了 这种心态去做...
    花老板的喵阅读 408评论 0 2