JS实现斐波那契数列的五种方式(小结)


Posted in Javascript onSeptember 09, 2020

下面是五种实现斐波那契数列的方法

循环

function fibonacci(n){
 var res1 = 1;
 var res2 = 1;
 var sum = res2;
 for(var i = 1;i < n;i ++){
   sum = res1 + res2;
   res1 = res2;
   res2 = sum;
 }
 return sum;
}

普通递归

function fibonacci (n) {
 if ( n <= 1 ) {return 1};
 return fibonacci(n - 1) + fibonacci(n - 2);
}

尾递归

function fibonacci(n, ac1=1,ac2=1){
  if(n<=1){return ac2}
 return fibonacci(n-1, ac2, ac1 + ac2)
}
Generator 函数和for...of循环
// Generator 函数和for...of循环
function* fibonacci() {
 let [prev, curr] = [0, 1];
// foo(;;)相当于死循环 等于while(1)
 for (;;) {
  yield curr;
  [prev, curr] = [curr, prev + curr];
 }
}
for (let n of fibonacci()) {
 if (n > 1000) break;
 console.log(n);
}

闭包实现

const fibonacci = function(){
  var mem = [0,1];
  var f = function(n){
    var res = mem[n];
    if(typeof res !== 'number'){
      mem[n] = f(n-1) + f(n-2);
      res = mem[n];
    }
    return res;
  }
  return f;
}();

到此这篇关于JS实现斐波那契数列的五种方式(小结)的文章就介绍到这了,更多相关JS 斐波那契数列内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Javascript 相关文章推荐
IE和Mozilla的兼容性汇总event
Aug 12 Javascript
showModelDialog弹出文件下载窗口的使用示例
Nov 19 Javascript
JS实现仿腾讯微博无刷新删除微博效果代码
Oct 16 Javascript
jquery html动态添加的元素绑定事件详解
May 24 Javascript
浅谈jquery的map()和each()方法
Jun 12 Javascript
vue组件实例解析
Jan 10 Javascript
webpack4.0打包优化策略整理小结
Mar 30 Javascript
老生常谈JS中的继承及实现代码
Jul 06 Javascript
vue中使用heatmapjs的示例代码(结合百度地图)
Sep 05 Javascript
cocos2dx+lua实现橡皮擦功能
Dec 20 Javascript
Vue中通过Vue.extend动态创建实例的方法
Aug 13 Javascript
vue实现表格合并功能
Dec 01 Vue.js
JavaScript代码简化技巧实例解析
Sep 09 #Javascript
vue 手机物理监听键+退出提示代码
Sep 09 #Javascript
关于angular引入ng-zorro的问题浅析
Sep 09 #Javascript
关于vue的列表图片选中打钩操作
Sep 09 #Javascript
JavaScript日期库date-fn.js使用方法解析
Sep 09 #Javascript
js实现简单抽奖功能
Nov 24 #Javascript
js实现贪吃蛇游戏 canvas绘制地图
Sep 09 #Javascript
You might like
php at(@)符号的用法简介
2009/07/11 PHP
PHP计算2点经纬度之间的距离代码
2013/08/12 PHP
限制ckeditor上传图片文件大小的方法
2013/11/15 PHP
PHP实现网页内容html标签补全和过滤的方法小结【2种方法】
2017/04/27 PHP
php简单中奖算法(实例)
2017/08/15 PHP
PHP7下协程的实现方法详解
2017/12/17 PHP
PHP面向对象程序设计重载(overloading)操作详解
2019/06/13 PHP
Yii框架Session与Cookie使用方法示例
2019/10/14 PHP
jQuery实现单行文字间歇向上滚动源代码
2013/06/02 Javascript
js固定DIV高度,超出部分自动添加滚动条的简单方法
2013/07/10 Javascript
Jquery 返回json数据在IE浏览器中提示下载的问题
2014/05/18 Javascript
js使用栈来实现10进制转8进制与取除数及余数
2014/06/11 Javascript
JavaScript function 的 length 属性使用介绍
2014/09/15 Javascript
javascript面向对象之共享成员属性与方法及prototype关键字用法
2015/01/13 Javascript
实例解析JS布尔对象的toString()方法和valueOf()方法
2015/10/25 Javascript
基于JS实现密码框(password)中显示文字提示功能代码
2016/05/27 Javascript
Node.js开启Https的实践详解
2016/10/25 Javascript
教你一步步用jQyery实现轮播器
2016/12/18 Javascript
jQuery中Datatables增加跳转到指定页功能
2017/02/08 Javascript
Webpack优化配置缩小文件搜索范围
2017/12/25 Javascript
vue+express 构建后台管理系统的示例代码
2018/07/19 Javascript
JS Math对象与Math方法实例小结
2019/07/05 Javascript
Javascript和jquery在selenium的使用过程
2019/10/31 jQuery
JavaScript React如何修改默认端口号方法详解
2020/07/28 Javascript
[03:22]DSPL第一期精彩集锦:酷炫到底!
2014/11/07 DOTA
[49:08]FNATIC vs Infamous 2019国际邀请赛小组赛 BO2 第二场 8.16
2019/08/18 DOTA
python使用7z解压软件备份文件脚本分享
2014/02/21 Python
深入解析Python中的集合类型操作符
2015/08/19 Python
python中pandas.DataFrame对行与列求和及添加新行与列示例
2017/03/12 Python
PyCharm在win10的64位系统安装实例
2017/11/26 Python
python进阶之自定义可迭代的类
2019/08/20 Python
python绘制玫瑰的实现代码
2020/03/02 Python
PyCharm Ctrl+Shift+F 失灵的简单有效解决操作
2021/01/15 Python
NIHAOMARKET官方海外旗舰店:意大利你好华人超市
2018/01/27 全球购物
实习鉴定范文
2013/12/19 职场文书
Python下opencv使用hough变换检测直线与圆
2021/06/18 Python