generator 通过 yield 实现斐波那契数列惰性计算,每次 next() 生成下一个数;基本实现用两个变量保存前两项并循环 yield 和更新;可封装 take 函数按需取前 n 项。

JavaScript 中 Generator 通过 yield 暂停执行并逐次产出值,天然适合实现斐波那契数列的惰性计算——每次调用 next() 才生成下一个数,不预先计算全部序列。
基本实现:用 yield 逐步产出
利用两个变量保存前两项,每次 yield 当前和,并更新状态:
function* fibonacci() {
let a = 0, b = 1;
yield a;
yield b;
while (true) {
const next = a + b;
yield next;
a = b;
b = next;
}
}
<p>// 使用示例
const fib = fibonacci();
console.log(fib.next().value); // 0
console.log(fib.next().value); // 1
console.log(fib.next().value); // 1
console.log(fib.next().value); // 2
console.log(fib.next().value); // 3</p>按需取前 N 项:配合 for...of 或手动控制
避免无限循环,可封装一个取前 n 项的辅助函数:
Java JDK 25 来自 OpenJDK 官方归档,版本为 JDK 25,本条下载地址已指向官方 Windows x64 zip 安装包直链,适合调试旧项目或兼容旧版 Java 运行环境。
function take(gen, n) {
const result = [];
for (let i = 0; i console.log(take(fibonacci(), 10));
// [0, 1, 1, 2, 3, 5, 8, 13, 21, 34]支持重置与复用:返回带 reset 的包装对象
原生 Generator 一旦遍历完就不可重用。可封装成可重置的迭代器:
function createFibonacci() {
function* fibGen() {
let a = 0, b = 1;
yield a;
yield b;
while (true) {
const next = a + b;
yield next;
a = b;
b = next;
}
}
<p>let gen = fibGen();</p><p>return {
next() { return gen.next(); },
reset() { gen = fibGen(); }
};
}</p><p>const fib = createFibonacci();
console.log(fib.next().value); // 0
console.log(fib.next().value); // 1
fib.reset();
console.log(fib.next().value); // 0(重新开始)</p>结合迭代协议:让对象直接支持 for...of
给自定义对象部署 [Symbol.iterator],使其能被 for...of 消费:
const Fibonacci = {
*[Symbol.iterator]() {
let a = 0, b = 1;
yield a;
yield b;
while (true) {
const next = a + b;
yield next;
a = b;
b = next;
}
}
};
<p>for (const num of Fibonacci) {
if (num > 100) break;
console.log(num); // 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89
}</p>Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










