斐波那契数列 获取指定长度 Fibonacci 获取某段Fibonacci

今天在网上溜达突然翻到一段斐波那契的代码,使用循环实现。
想着自己以前大概知道有这么个东西,但是还没写过相关代码,于是百度了一下斐波那契的具体含义,用递归和循环写段代码分别实现一下。

斐波那契数列

关于Fibonacci:

要点:从第三项开始,每一项都是前两项之和。

实现

    //封装一个fibonacci对象,提供获取指定长度斐波那契数列或指定段斐波那契数列的方法
    var fibonacci = {
        arr: [],
        //递归方式
        getFibonacciRecursion: function (i = 0, length = 30) {
            if (length < 2) return;
            if (i >= length) return this.arr;
            i < 2 ? this.arr.push(1) : this.arr.push(this.arr[i - 1] + this.arr[i - 2]);
            return this.getFibonacciRecursion(++i);
        },
        //循环方式
        getFibonacciLoop: function (i = 0, length = 30) {
            if (length < 2) return;
            for (; i < length; i++) {
                i < 2 ? this.arr.push(1) : this.arr.push(this.arr[i - 1] + this.arr[i - 2]);
            }
            return this.arr;
        },
        //返回某段Febonacci,使用的时候注意slice包含头不包含尾
        getLimitFibonacci: function (start, end) {
            if (!(typeof start === 'number' && typeof end === 'number')) return;
            //解构互换
            if(start > end) [start,end] = [end,start];
            return this.getFibonacciLoop(0, 30).slice(start, end);
        },
    }
    console.log(fibonacci.getLimitFibonacci(20, 10));

测试

猜你喜欢

转载自www.cnblogs.com/ltfxy/p/12573613.html