学习node的流对象,拿一个数列练手。
全部代码如下:
/**
* 用流来实现斐波那契数列
*
* @author yyy
*/
var stream=require('stream');
var util=require('util');
// 构造方法
// n是最大个数
function StreamChild(n)
{
this.a=0;
this.b=1;
this.n = n;
stream.Readable.call(this);
}
util.inherits(StreamChild, stream.Readable );
// 覆盖父类的方法
StreamChild.prototype._read = function(){
this.push('f(0):'+ this.a.toString());
this.push('f(1):'+ this.b.toString());
for(let i=2;i<= this.n+1-2;i++) {
[this.a, this.b] = [this.b, this.a+this.b];
this.push( `f(${i}):${this.b}` );
}
this.push(null);
};
var child=new StreamChild(10);
// 下面设置监听器,注意:同时也开始执行读事件!这也是流对象的特点!
child.on('data',(data)=>{
console.log(data.toString());
});
child.on('end',()=>{
console.log('end');
});
下面是输出结果:
f(0):0
f(1):1
f(2):1
f(3):2
f(4):3
f(5):5
f(6):8
f(7):13
f(8):21
f(9):34
end
说明,还有第2种写法
把最后的on(‘data’)和on('end')语句去除,用一句话代替。
child.pipe(process.stdout);
也可以正确执行,请读者推测输出有什么不同。
读流和写流可以管道串联起来执行,可参见
读流和写流学习
分享到:
相关推荐
根据给定的信息,本文将详细解释如何通过使用循环队列来构建斐波那契数列的一个特殊变体,即4阶斐波那契序列,并确保序列的第n项小于等于200,而第n+1项大于200。 ### 1. 4阶斐波那契数列定义 在标准的斐波那契...
在JavaScript中,我们可以使用Generator函数来优雅地实现斐波那契数列。 Generator函数是ES6引入的一种新的函数类型,它可以生成一个可迭代的对象,允许我们在执行过程中暂停和恢复。这种特性非常适合处理斐波那契...
理解并能有效地实现斐波那契数列是编程基础的重要组成部分,因为它涉及到基础数据类型、控制流(如循环和条件语句)、函数以及优化策略。学习这些概念有助于提升JavaScript编程技能,并对其他编程语言的理解也有所...
斐波那契数列是一个经典的数学概念,在编程领域中经常被用作教学示例或算法练习。这个名为"ControlHubTest"的项目提供了一个REST API,允许用户通过HTTP请求获取斐波那契数列的特定数字。REST(Representational ...
在"NodeJSLesson6:学习 node.js"这个项目中,我们将探讨如何使用Node.js来实现一个简单的功能,即根据用户输入返回斐波那契数列的特定位置上的数值。斐波那契数列是一个经典的数学概念,其定义是:每个数都是前两个...
而 '/factorial' 路径则对应计算阶乘的函数,'/fibonacci' 用来计算斐波那契数列的值,'/mult' 路径则对应执行两个数的乘法运算。 数值传递在 Node.js 中通常通过 URL 参数实现。在 htutil.js 模块中,通过 exports...
`fibonacci_prime`项目可能就是这样一个实现,用于找出斐波那契数列中所有的素数。 【描述】"访问实时网站:这句描述可能意味着该项目提供了一个在线平台,用户可以实时查看或测试斐波那契素数的生成结果。下载源...
在JavaScript中实现斐波那契数列,有多种方法,每种都有其特点和适用场景。以下是一些常见的实现方式: 1. **递归**: 递归是最直观的实现方式,但效率较低,因为它会进行大量的重复计算。基本代码如下: ```...
12. **动态规划**:用于解决最优化问题,通过构建子问题的最优解来找到全局最优解,如斐波那契数列、背包问题等。 13. **贪心算法**:每次做出局部最优选择,希望最终得到全局最优解,如Prim最小生成树算法和...
JS中的斐波那契数列 对于整数n = 0、1、2 ...,实现一个返回第n个斐波那契数f(n)的函数 前端 其中包含一个简单的演示,使您可以比较斐波那契序列的时间,该时间是由直接递归计算出来的,并结合使用递归和备忘录来...
Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境,它让 JavaScript 能够在服务器上执行,从而实现服务器端的脚本语言。Node.js 最显著的特点是它的异步 I/O 和事件驱动的架构,使得它非常适合于构建高并发...
- `/fibonacci/:n` 接口使用异步计算斐波那契数列的第`n`项。 - `/factorial/:n` 接口计算`n`的阶乘。 - `/mult/:a/:b` 接口计算两个数`a`和`b`的乘积。 - `/square/:a` 接口计算`a`的平方。 每个接口都接收...
- 'fibonacci'路径下执行斐波那契数列计算。 - 'mult'路径下执行乘法计算。 Express框架中对于视图渲染和错误处理,本教程介绍了以下知识点: - 设置视图引擎:Express框架允许设置不同的模板引擎进行视图渲染,...
在给定的“JavaSourceCodePracticeSolveProblems”压缩包中,包含了多个Java源代码文件,主要涉及了几个经典的算法问题:阶乘计算、斐波那契数列、二叉搜索树(BST)的实现以及素数检测。这些都是计算机科学和编程...
2. **斐波那契数列**:递归也可用于生成斐波那契数列,每个数字是前两个数字的和。但需要注意的是,由于重复计算,直接递归实现效率较低: ```cpp int fibonacci(int n) { if (n ) { // 基本情况 return n; } ...
在Java中,递归常用于解决需要重复执行相同任务但每次处理的数据不同的问题,例如遍历树形结构、计算阶乘、求解斐波那契数列等。本篇文章将详细介绍如何使用Java实现递归调用来遍历一棵树,并结合SQL代码进行说明。 ...
- 递归算法:递归是函数调用自身的过程,常用于解决分治策略的问题,如斐波那契数列、树的遍历等。使用场合通常涉及解决问题的子问题与原问题具有相同结构的情况。 5. 设计模式: - 工厂模式:提供一个创建对象的...
总结来说,Node.js通过child_process和cluster模块实现了多进程处理,解决了CPU密集型任务的效率问题。通过创建子进程,我们可以将计算任务分解并分配到不同的进程中,使得计算能够并发进行,从而提高了整体的运行...