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

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

原作者:祁宇.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 @ 2019-06-07 11:06  zjh6  阅读(14)  评论(0)    收藏  举报  来源