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