斐波那契数列打印的五种方法

如下

手写兔子序列打印

 let arr = [0, 1, 1]
        function fn(n) {
            if (n === 1 || n === 2) {
                return 1;
            }
            let data = fn(n - 1) + fn(n - 2);
            arr[n] = data //将data保存,避免重复求值
            return data
        }
        fn(8)
        console.log(arr);

闭包

//闭包
function fibo(n){
    if(n<0){
        throw new Error('输入的数字不能小于0')
    }
    let arr = [0,1,1];
    function recursion(n){
        if(n<3){
            return arr[n]
        }
        if(arr[n]!==undefined){
            return arr[n]
        }
        let data = recursion(n-1)+recursion(n-2)
        arr[n] = data       //将data保存,避免重复求值
        return data
        
    }
    recursion(n)
    return arr
}
console.log(fibo(5),"fibo")    //5
let arr=[0,1,1]
function test(n){
     if(n<3){
       return arr[n]
     }
     if(arr[n]!==undefined){
      return arr[n]
    }
   let data= test(n-1)+test(n-2 )//如果没有return data的话是娶不到值的
   arr[n]=data
   return data
}
 test(6)
console.log(arr,"text")

//数组的方法
function fibo_arr(n){
   var arr = [0,1,1]
      if(n<0){
         throw new Error('输入的数字不能小于0')
      }
      if(n>=3){
         for(var i = 3; i <= n; i++){
             arr[i] = arr[i-1]+arr[i-2]
         }
      }
    return arr
 }
console.log(fibo_arr(5))    //0, 1, 1, 2, 3, 5]

//es6结构与方法
function fib(max) {

     var t,a=0,b=1,arr = [0,1];

     while (arr.length < max) {

            [a,b] = [b,a+b]; //es6的解构

            arr.push(b)
     }
     return arr;
}
 console.log(fib(10),"fib")


//循环
function fiboCCycle(n){
  var num1 = 1,num2 = 1,sum,arr=[0,1,1];
  for(var i = 3; i < n; i++){
    sum = num1 + num2;   //用sum累加前两个数之和
    num1 = num2;
    num2 = sum;
       arr.push(sum)
  }
  if(n==1||n==2){
    return 1
  }else{
    return arr
  }
}

console.log(fiboCCycle(10))   //5
``

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值