当一些计算结果可以保留下来为以后的运算提供方便的时候, 就可以用到记忆话函数

记忆化函数将计算结果存储起来,如果之后碰到相同的参数,就直接放回已经计算过的参数

使用限制: 纯函数

算法思想:空间换时间


/*** 记忆化函数*/
function memorize(func) {var cache = {};return function() {//让参数长度与参数拼接成字符串,例如1,2 -> 212,形成唯一的key值var key = arguments.length + Array.prototype.join.call(arguments);   if(cache[key]) {return cache[key];} else {cache[key] = func.apply(this, arguments);return cache[key];}}
}/*** 求阶乘*/
function factorial(num){if(num == 1 || num == 0){return 1;}else {return num * factorial(--num);}
}
var memorizeFunc = memorize(factorial);console.time('pre')
console.log(factorial(5));
console.timeEnd('pre');       // 0.18994140625ms
console.time('mem');
console.log(memorizeFunc(5))
console.timeEnd('mem');       // 0.10009765625msconsole.time('pre')
console.log(factorial(50));
console.timeEnd('pre');       // 0.274169921875ms
console.time('mem');
console.log(memorizeFunc(50))
console.timeEnd('mem');       // 0.200927734375ms

Javascript编程技巧 -- 函数记忆相关推荐

  1. 【JavaScript】常用设计模式及编程技巧(ES6描述)

    前言 平时的开发中可能不太需要用到设计模式,但是 JS 用上设计模式对于性能优化和项目工程化也是很有帮助的,下面就对常用的设计模式进行简单的介绍与总结. 1. 单例模式 定义:保证一个类仅有一个实例, ...

  2. JavaScript 异步编程--Generator函数、async、await

    JavaScript 异步编程–Generator函数 Generator(生成器)是ES6标准引入的新的数据类型,其最大的特点就是可以交出函数的执行的控制权,即:通过yield关键字标明需要暂停的语 ...

  3. JavaScript 编程精解 中文第三版 三、函数

    三.函数 原文:Functions 译者:飞龙 协议:CC BY-NC-SA 4.0 自豪地采用谷歌翻译 部分参考了<JavaScript 编程精解(第 2 版)> 人们认为计算机科学是天 ...

  4. 天瑞地安集团:JavaScript编程小技巧让“菜鸟”编程变得更轻松!

    JavaScript是最常用和使用最广泛的编程语言之一.今天要给大家分享的是天瑞地安资深程序员达达在工作中积累的一些技巧,希望对各位喜欢编程的朋友们有所帮助,这些JS开发工具不仅为程序员提供了更多可能 ...

  5. 原生js循环展示dom_web前端教程:JS高阶编程技巧-惰性函数

    框架(framework)是一个框子--指其约束性,也是一个架子--指其支撑性.是一个基本概念上的结构,用于去解决或者处理复杂的问题. Web前端教程 框架这个广泛的定义使用的十分流行,尤其在软件概念 ...

  6. DSP编程技巧---C/C++与汇编语言的交互之-使用编译器的内联函数

    在C/C++与汇编语言混合编程的情况下,一般我们都会选择C/C++来实现所期待的功能.在我们用C/C++来实现某些位操作.数学运算等功能后,编译器会尽可能地把它们编译为一些已经高度优化的汇编函数(内联 ...

  7. JavaScript权威指南 - 函数

    函数本身就是一段JavaScript代码,定义一次但可能被调用任意次.如果函数挂载在一个对象上,作为对象的一个属性,通常这种函数被称作对象的方法.用于初始化一个新创建的对象的函数被称作构造函数. 相对 ...

  8. java数据和窗口怎么结合_卖jsp编程技巧的那个垃圾的所有实例的答案全部

    卖jsp编程技巧的那个垃圾的所有实例的答案全部 发布时间:2016-09-14 来源: 点击: 次 1. 如何让选中的一行记录高亮显示? http://topic.csdn.net/t/2005010 ...

  9. JAVA按键关闭窗口csdn_JSP_卖jsp编程技巧的那个垃圾的所有实例的答案全部已收集,现将他人收集的实例答案公布出来,大家鉴赏!,1. 如何让选中的一行记录高亮 - phpStudy...

    卖jsp编程技巧的那个垃圾的所有实例的答案全部已收集,现将他人收集的实例答案公布出来,大家鉴赏! 1. 如何让选中的一行记录高亮显示? http://topic.csdn.net/t/20050105 ...

最新文章

  1. sql中如何统计各种零件的总数量_[Python]提取数据库中数据, 用人货场的分析方法, 对电商双十一促销活动结果数据进行复盘分析...
  2. Make it run, make it right, make it fast
  3. 计算机指令流水线时间计算,计算机指令-流水线和吞吐率
  4. matlab优化算法案例分析与应用_最优化计算与matlab实现(18)——粒子群优化算法——权重改进的粒子群算法...
  5. 网络——发送email(一个简单荔枝)
  6. Java代码样式运算符换行格式
  7. 1018 锤子剪刀布 (20分)
  8. php golang 加密 对接,把php的加密算法转为go语言
  9. 关于ThreadPool.RegisterWaitForSingleObject和WaitHandle的应用介绍
  10. 微博机器学习平台架构及在微博推荐中的应用
  11. LeetCode 530二叉搜索树的最小绝对差
  12. mongodb adminmongo 使用过程中的一些小问题记录
  13. MySQL主从复制故障1595报错【原创】
  14. 25个jQuery的编程小抄
  15. WPF 控件专题 TextBox控件详解
  16. Butterworth数字滤波器设计
  17. 录屏可以录声音吗?录制带声音的视频,这个方法轻松解决
  18. 让 QQ 邮箱更好用,支持桌面通知
  19. 阿里云弹性计算技术专家樊毅伟:云上成本优化实践
  20. React Native桥接器初探

热门文章

  1. Java swing 代码例子
  2. 使背景图片适应不同分辨率电脑
  3. WPF:动态显示或隐藏Listview的某一列
  4. mssql访问 oracle
  5. 11个Javascript树形菜单
  6. scss编译输出css并转换成rem
  7. [Ajax] 实现跨域访问
  8. 详细了解文档对象模型(DOM)
  9. 有关cookie实现统计pv,uv的一些用法
  10. 变成小白的第一本Python入门书,第五章循环与判断课后题答案