斐波拉契数列

斐波拉契数列又称“兔子数列”,例如 [0, 1, 1, 2, 3, 8, 13, 21, 34];
数学公式为: F(n)=F(n - 1)+F(n - 2)

打印斐波拉契数列

普通写法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
/**
*
* @param {*} len 返回数组的长度
*/
function setFS(len) {
if(!len) return;
let arr = [0, 1];
let a = 0, b = 1;
while (arr.length < len) {
[a, b] = [b, a + b];
arr.push(b);
}
return arr;
}

console.log(setFS(10)) // [0, 1, 1, 2, 3, 5, 8, 13, 21, 34 ]

generator写法

这种写法并没有比普通写法简单,主要是为了利用generator的方法; 其中while (true)是让FS这个迭代器无限次迭代,相当于一直 yield b,这样在 next()执行迭代器的时候,next多少次就会有多少个yield b;

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29

function* FS() {
let a = 0, b = 1;
yield a;
yield b;
while (true) {
[a, b] = [b, a + b];
yield b;
}
}

function setFS(len) {
if (!len) return;

let res = [];

// generator对象
let geneFS = FS();

for (var i = 0; i < len; i++) {
res.push(geneFS.next().value);
}

return res;

}

console.log(setFS(10)) // [0, 1, 1, 2, 3, 5, 8, 13, 21, 34 ]