js实现斐波那契数列(0为首项)

回顾几个月之前看网上罗列了一些java算法的经典例子,和同事私下没事一块研究只用js如何打印斐波那契数列

1 必须是这样的一个数列 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55…这个数列从第3项开始,每一项都等于前两项之和。

2.n从1开始,例如,第1项是0,第2项是1,第4项是2。(n > 0)


<!DOCTYPE HTML>
<html>
<head><meta charset="utf-8">
<title>ab</title>
<meta name="Keywords" content="">
<meta name="Description" content="">
<!-- <script type="text/javascript" src="jquery.js"></script> -->
<script>
window.onload =function (){
/*function fib(a){
    if(a==1){

    return 0;
}else
if(a<1){
    return  a < 2? a : fib(a-1)+fib(a-2);
}
}*/

function fib(a){
    /*if (1<a< 3)return a;*/
    if (a==1) return 0; // 我天真的以为这样就能行
else if(a-2>=0){return  fib(a-1)+fib(a-2);}


}



var testCases = [1,2, 3, 4,5,7,-1];
var $resultEle = document.getElementById('result');
testCases.forEach(function (n) {
  var result = fib(n);
  var $ele = document.createElement('p');
  $ele.innerHTML = '第' + n + '个数是:' + result;
  $resultEle.appendChild($ele);
});

}
</script>
</head>
<body>

<div id="result"></div>
</body>
</html>

结果输出
第1个数是:0 第2个数是:NaN 第3个数是:NaN
第4个数是:NaN 第5个数是:NaN 第7个数是:NaN
第-1个数是:undefined

查网上资料

用js写斐波那契数列的四种算法
标签: 斐波那契数列 js callee 闭包分类: javascript世界
//四种斐波那契数列
      //  var cnt = 0;
        //方法一(常规):6765(结果),21891(计算次数)--下同
       var fib = function (n) {
            cnt++;
            if (n < 2) return n;
            return fib(n - 1) + fib(n - 2);
        };
        //方法二(第三方参数)6765,19
       var fib = function (k) {
            var m = 0, n = 1, sum;
            if (k < 2) return k;
            for (var i = 2; i < k+1; i++,cnt++) {
                sum = m + n;
                m = n;
                n = sum;
            }
            return sum;
        };
        //方法三(数组)6765,19
       var fib = function (n) {
            var arr = [0, 1];
            for (var i = 2; i < n+1; i++,cnt++) {
                arr[i] = arr[i - 1] + arr[i - 2];
            }
            return arr[n];                                 
        };
        //方法四(闭包)6765 ,19
       var fib = function (n) {
            var arr = [0,1];
            if (n < 2) return n;
            return (function (n) {
                if (n > 1 && !arr[n]) {
                    arr[n] = arguments.callee(n - 1) + arguments.callee(n - 2);
                    cnt++;
                }
                return arr[n];
            })(n);
        };
        //执行20计算结果与次数

之后又继续改啊改
反正这个fib()函数我试过了挺多次 浏览器总一直弹错误无法解释。
后来在群里问一个叫小明的人,他仿佛点醒了我

function fib(n) {
  var x = 0, y = 1, sum;
  if(n<=0) return 0;
  if (n < 2) return n;
  for (var i = 2; i < n+1; i++) {
    sum = x + y;
    x = y;
    y = sum;
  }
  return sum;
}

之后将他给的js代码改了之后 终于完成:
js应该如下这样写才行

function fib(n) {
  var x = 0, y = 1, sum;
  if(n<=0) return null;
  if(n<=1) return 0;
  if (n < 3) return n-1;
  for (var i = 3; i < n+1; i++) {
    sum = x + y;
    x = y;
    y = sum;
  }
  return sum;
}



var testCases = [10, 20, 30, 100,6,5, 4, 3,2, -1, 1];
var $resultEle = document.getElementById('result');
testCases.forEach(function (n) {
  var result = fib(n);
  var $ele = document.createElement('p');
  $ele.innerHTML = '第' + n + '个数是:' + result;
  $resultEle.appendChild($ele);
});
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值