神奇的函数缓存.妈妈再也不用担心递归类函数跑不快了

神奇的函数缓存.妈妈再也不用担心递归类函数跑不快了.

原作者:祁宇.ppt下载地址:在此
真的非常神奇!

元<型名 R,型名...A>
函数<R(A...)>缓存(R(*针)(A...)){
    静 映<元组<A...>,R>啊;
    打印("啊",啊.大小());
    中[=](A...o){//这是最后执行的函数
        元组<A...>t(o...);动 m=啊.查找(t);
        如(m==啊.尾())啊[t]=针(o...);
        打印("啊",啊.大小());
        中 啊[t];
    };//[=]不能换,*一换就出错*,必须要把所有指针传出去,所以,要用=号,否则要出问题
    //一直用的是这个内部函数,同一个函数.所以啊0只打印了一次
}//返回的是f函数,这个玩意儿还是高级货非常厉害的
元<型名 R,型名...A>
动 快计(R(*针)(A...)){//每一个函数都保存了的
    用 函=函数<R(A...)>;静 无序映<推导(针),函>呀;
    动 p=呀.查找(针);
    如(p==呀.尾())压(呀,针,缓存(针));//就是这里
    //打印("呀",呀.大小());//通过这里可以知道,这里只缓冲了一个,所以没必要用无序映.
    中 呀[针];
    //针,变成缓存针了,对不,这个p还没变化
    //查到针的,然后压进去了.每次在缓存这里变化
    //直接返回的呀[针]
}//返回的是函数,这个函数针与参数结合,返回已存储值
//多适用于函数不变,参数不变的递归函数
//快计,快速计算.有缓冲的计算

测试:

f(整 i){中(i<2)?i:f(i-1)+f(i-2);}
整 g(整 i){
    中(i<2)?i:快计(g)(i-1)+快计(g)(i-2);
}

空 测试1(){
    计时器 t;
    整 n=g(38);
    输出<<n;
    t.看();
}//开始还怀疑出错了.
空 测试(){
    计时器 t;
    整 n=f(38);
    输出<<n;
    t.看();
}

空 主(){
    测试();
    测试1();
}

posted @   zjh6  阅读(11)  评论(0编辑  收藏  举报  
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示