先看一下代码:

再看一下执行时间:

可以看出第一个阶乘的执行时间是3ms,后面的由于缓存了之前的计算结果,所以直接返回结果。

原理就是缓存之前的计算,避免重复计算。关键在于建立缓存数组。

可以看一下执行第一行调用的时候memfactorial.cache是什么样子的

从这张图即可得出结论,为何需要缓存。即避免重复计算。

代码:

function memfactorial(n) {
if(!memfactorial.cache) {
memfactorial.cache = [1,1];
} if(!memfactorial.cache[n]) {
memfactorial.cache[n] = n * memfactorial(n-1);
} return memfactorial.cache[n];
}

尾递归优化结果:

常规递归结果:

最新文章

  1. 基于DDD的现代ASP.NET开发框架--ABP系列文章总目录
  2. C# 小知识
  3. Apache Kafka – KIP 32,33 Time Index
  4. FlexSlider jQuery滑动切换插件 参数
  5. Shell脚本检测文件夹是否已被挂载的方法
  6. laravel中的错误与日志
  7. Remodal – 支持 Hash 追踪的响应式模态窗口
  8. C++/CLI——读书笔记《Visual C++/CLI从入门到精通》 第Ⅳ部分
  9. Margin and Padding in Windows Forms Controls
  10. java的nio之:java的nio系列教程之pipe
  11. codeforces Gym 100500H A. Potion of Immortality 简单DP
  12. [HTML5] Level up -- Display
  13. Windows 怎么知道我已连线到网际网络? 原来当中大有文章!
  14. ios基金会-XCode温馨提示
  15. 基于Java 的增量与完全备份小工具
  16. Linux指令--rm, rmdir
  17. spring学习笔记一 入门及配置
  18. JavaScript 系列博客(七)
  19. delphi中退出是弹出让你确定的几种确定对话框怎么写?
  20. Centos7.5 VMtools的安装与卸载

热门文章

  1. oscache.properties文件配置
  2. Location - BOM对象
  3. Oracle 中 over() 函数
  4. 【原创】6. 在MYSQL++中实现SQL语法中的NULL
  5. 面试中的C++常见问题
  6. 【COCI2012】覆盖字符串
  7. Mybatis中resultType和resultMap
  8. ubuntu 设置虚拟机和主机在同一网段
  9. adb shell unauthorized问题
  10. js精度(摘)