#题目描述#
请你编写一个生成器函数,并返回一个可以生成 斐波那契数列 的生成器对象。
斐波那契数列 的递推公式为 Xn = Xn-1 + Xn-2 。
这个数列的前几个数字是 0, 1, 1, 2, 3, 5, 8, 13 。
#示例#
1、示例1
输入:callCount = 5
输出:[0,1,1,2,3]
解释:
const gen = fibGenerator();
gen.next().value; // 0
gen.next().value; // 1
gen.next().value; // 1
gen.next().value; // 2
gen.next().value; // 3
2、示例2
输入:callCount = 0
输出:[]
解释:gen.next() 永远不会被调用,所以什么也不会输出
#提示#
0 <= callCount <= 50
#题目解析#
1、准入准出:编写一个生成器函数,并返回一个可以生成 斐波那契数列 的生成器对象。
/**
* @return {Generator<number>}
*/
var fibGenerator = function*() {
};
2、结果解析:
斐波那契数列 的递推公式为 Xn = Xn-1 + Xn-2 。初始化 a = 0, b = 1,;
根据递推公式可得出:
- 生成器第一次调用返回0
- 第二次调用返回1
- 之后每次调用都是前两个数相加
#答案解析#
1、迭代法:
/**
* @return {Generator<number>}
*/
var fibGenerator = function* () {
let pre = 0,
cur = 1;
yield pre;
yield cur;
while (true) {
yield pre + cur;
[pre, cur] = [cur, pre + cur];
}
};
2、递归法
/**
* @return {Generator<number>}
*/
var fibGenerator = function*(m=1, n=0) {
yield n;
yield* fibGenerator(m+n, m)
};