斐波拉契数列
斐波拉契数列又称“兔子数列”,例如 [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
|
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))
|
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 = [];
let geneFS = FS();
for (var i = 0; i < len; i++) { res.push(geneFS.next().value); }
return res;
}
console.log(setFS(10))
|