斐波那契实现阶乘js_功能与命令式编程。 Java 8中的斐波那契,素数和阶乘

斐波那契实现阶乘js

有多种编程风格/范例,但是两个著名的风格是ImperativeFunctional

命令式编程是最主要的范例,因为几乎所有主流语言(C ++,Java,C#)都在推广它。 但是在最近几年中,函数式编程开始受到关注。 主要驱动因素之一是,仅所有新计算机都带有4、8、16或更多核,并且以命令式方式编写并行程序以利用所有核非常困难。 功能风格将这种困难转移到了运行时级别,并使开发人员摆脱了繁琐且容易出错的工作。

等待! 那么这两种样式有什么区别。

命令式编程是一个范例,您可以在其中说明如何准确地执行机器/运行时语句以及应该执行哪些准确的语句以达到期望的结果。

函数式编程是声明性编程范式的一种形式,您可以在其中声明要实现的目标,而机器/运行时将确定执行此操作的最佳方法。

功能风格将方式部分移至运行时级别,并帮助开发人员专注于一部分。 通过抽象如何部分我们可以写出更好的可维护性和可扩展的软件。

为了应对多核计算机所带来的挑战并保持对开发人员的吸引力, Java 8引入了紧随其后的功能范式。

有足够的理论,让我们使用Java来实现命令式和函数式编程中的几个编程难题,并看看其中的区别。

斐波那契数列命令式与功能性 (斐波那契数列是数字的序列:1、1、2、3、5、8、13、21、34,…。下一个数字是通过将前面的两个数字相加而得出的。)

斐波那契数列的迭代式和命令式

public static int fibonacci(int number) {int fib1 = 1;int fib2 = 1;int fibonacci = fib1;for (int i = 2; i < number; i++) {fibonacci = fib1 + fib2;fib1 = fib2;fib2 = fibonacci;}return fibonacci;
}for(int i = 1; i  <= 10; i++) {System.out.print(fibonacci(i) +" ");
}
// Output: 1 1 2 3 5 8 13 21 34 55

正如你可以在这里看到我们的重点是如何 (迭代状态)很多,而这正是我们想要实现的。

斐波那契数列的迭代式和函数式

IntStream fibonacciStream = Stream.iterate(new int[]{1, 1},fib -> new int[] {fib[1], fib[0] + fib[1]}).mapToInt(fib -> fib[0]);fibonacciStream.limit(10).forEach(fib ->  System.out.print(fib + " "));
// Output: 1 1 2 3 5 8 13 21 34 55

相反,你可以在这里看到我们的重点是我们要达到的目标

质数命令式与功能性素数(质数是大于1的自然数,除1本身以外没有正除数。)

命令式素数

public boolean isPrime(long number) {  for(long i = 2; i <= Math.sqrt(number); i++) {  if(number % i == 0) return false;  }  return number > 1;  
}
isPrime(9220000000000000039L) // Output: true

再次,我们在此重点关注如何 (迭代,状态)。

功能风格的素数

public boolean isPrime(long number) {  return number > 1 &&  LongStream.rangeClosed(2, (long) Math.sqrt(number))  .noneMatch(index -> number % index == 0);
}
isPrime(9220000000000000039L) // Output: true

在这里我们再次的重点是我们要达到的目标 。 函数式样式帮助我们抽象出了在数字范围内进行显式迭代的过程。

您现在可能会想,嗯,这就是我们所能拥有的一切……。 ? 让我们看看如何以功能风格使用所有核心(获得并行性)。

public boolean isPrime(long number) {  return number > 1 &&  LongStream.rangeClosed(2, (long) Math.sqrt(number)).parallel()  .noneMatch(index -> number % index == 0);
}
isPrime(9220000000000000039L) // Output: true

而已! 我们只是将.parallel()添加到流中。 您可以看到库/运行时如何为我们处理复杂性。

阶乘命令式与函数式 (n的阶乘是所有小于或等于n的正整数的乘积。)

迭代式和命令式的阶乘

public long factorial(int n) {long product = 1;for ( int i = 1; i <= n; i++ ) {product *= i;}return product;
}
factorial(5) // Output: 120

迭代和功能风格的阶乘

public long factorial(int n) {return LongStream.rangeClosed(1, n).reduce((a, b) -> a *   b).getAsLong();
}
factorial(5) // Output: 120

值得重申的是通过抽象如何部分我们可以写出更好的可维护性和可扩展的软件。

要查看Java 8引入的所有功能特性,请查看以下Lambda表达式,方法参考和流指南。

翻译自: https://www.javacodegeeks.com/2015/12/functional-vs-imperative-programming-fibonacci-prime-factorial-java-8.html

斐波那契实现阶乘js

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/336606.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

cacti不能实时刷新流量图_介绍一种编码帧内刷新算法

0.引言本文主要介绍一种帧内刷新算法&#xff0c;解决I帧太大带来的延迟问题&#xff0c;可以在调优时&#xff0c;值得借鉴。帧内刷新技术避免 I 帧尖峰带来的带宽压力&#xff0c;可以有效地降低视频通信中的缓冲区延迟。帧内刷新算法是一种视频错误恢复的方法&#xff0c;通…

python kotlin_Java和Python中类似Kotlin的生成器,续:附加参数

python kotlin介绍 在今天的文章中&#xff0c;我们将继续上周的文章&#xff0c;内容涉及使用Java和Python创建类似Kotlin的构建器&#xff0c;并扩展了构建器API以采用一些可选参数以提高灵活性。 我们继续我们HTML示例&#xff0c;尝试添加标记属性&#xff0c;例如class&am…

按钮自动居中布局_CSS布局技巧

css实现左右布局和居中布局显示是前端进行页面设计的基础&#xff0c;也是全面了解并学习css一个很好的切入点&#xff0c;因为其中会涉及到对许多css基础点的认知。实现css入门&#xff0c;理解左右布局的实现方式是必经之路&#xff0c;同时也能使我们在项目中涉及前端编码的…

jooq_jOOQ星期二:拉斐尔·温特豪德(Rafael Winterhalter)正在与字节好友合作字节码...

jooq欢迎来到jOOQ Tuesdays系列。 在本系列文章中&#xff0c;我们每隔一个月的第三个星期二发布一篇文章&#xff0c;从jOOQ的角度采访我们发现该行业令人兴奋的人。 这包括从事SQL&#xff0c;Java&#xff0c;开放源代码以及各种其他相关主题的人员。 我们很高兴在第七版中…

多方法接口回调_啊?Java反射遇到接口

本文适合有点Java反射基础的同学&#xff0c;在Java反射调用方法时遇到接口参数是一件很蛋疼的事情。在反射调用方法时需要传参数&#xff0c;像传递基本数据类型进去用就完事&#xff0c;传个对象进去怎么整都没关系&#xff0c;因为你在外部有对象的引用&#xff0c;但 如果需…

0与1世界的初级编程篇之C语言

C语言是一门面向过程的计算机编程语言&#xff0c;与C、Java等面向对象编程语言有所不同。C语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、仅产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。C语言描述问题比汇编语言迅速&#xff0c;工作量小…

swarm部署集群_WildFly Swarm –将Java EE应用程序部署为独立的Jar

swarm部署集群WildFly Swarm提供了一个简单的解决方案&#xff0c;用于将Java EE应用程序部署为独立的Jar文件。 这使得部署应用程序非常容易&#xff0c;尤其是REST或Web服务。 Swarm在这方面与Spring Boot非常相似&#xff0c;因为它可以快速开发Web&#xff08;.War&#xf…

QT 手动创建信号函数 与 槽函数

自定义信号槽必须要有Q_OBJCT 自己通过关键字signals创建信号函数,只声明信号函数即可&#xff0c;系统会自动定义它。 利用 public slots: 声明一个槽函数&#xff0c;槽函数不会自动生成&#xff0c;并且去定义它。

九九乘法表代码口述_利用随机函数实现座次表的随机排座

昨天听完讲座&#xff0c;晚上忍不住写了份学后感&#xff0c;今天有老师在文章下留言问如何实现随机排座&#xff0c;上午在快速理赔中心处理交通事故&#xff0c;处理完后将车开去4S店维修&#xff0c;回来后给娃做完中饭就开始写代码实现这个功能&#xff0c;因为有C功底&am…

jep使用_JEP 277“增强弃用”非常好。 但这是一个更好的选择

jep使用维护API很难。 我们正在维护非常复杂的jOOQ API。 但是就语义版本而言&#xff0c;我们遵循相对宽松的规则 。 当您阅读Brian Goetz和其他人关于在JDK中保持向后兼容性的评论时&#xff0c;我只能对他们的工作表示敬意。 显然&#xff0c;我们都希望最终移除Vector &a…

python 港股交易数据_GitHub - 116pythonZS/futuquant: 富途量化平台 API

FutuQuant - 富途量化投资平台 (Futu Quant Trading API)简介​FutuQuant开源项目可以满足使用富途牛牛软件进行量化投资的需求, 提供包括Python接口、Json接口的行情及交易的API。安装pip install futuquant注: 本API同时兼容Python2和Python3, 推荐安装anaconda环境&#xff…

LeetCode 16.01 交换两数

原题链接 交换 a,b两个数&#xff0c;不开辟额外控件 解析&#xff1a; 设a甲 b乙 aa^b; 转换 a甲^乙 b乙 ba^b; 转换 b甲^乙^乙 因为 乙^乙0 甲^0甲 &#xff0c;所以b甲 aa^b; 转换 a甲^乙^甲 同上所述&#xff0c;所以 a乙 至此…

古巴比伦乘法_古巴平台中的通用过滤器–类固醇上的excel过滤器

古巴比伦乘法正如我上次承诺的那样&#xff0c;我计划浏览该平台的某些功能&#xff0c;这些功能我认为非常有价值。 所以我将在这里做一些系列。 从明显的用户界面&#xff0c;过滤&#xff0c;安全性到一些高级功能&#xff08;如Web Portal&#xff0c;可扩展性&#xff0c;…

excel运行没反应_Excel数据很少文件却很大,问题出在哪里呢?两种方法轻松解决...

经常和Excel打交道的小伙伴可能会有这样的困惑&#xff0c;一个Excel工作簿中的数据明明很少&#xff0c;文件所占的空间却很大。打开这种Excel工作簿后&#xff0c;电脑CPU占用率瞬间飙升&#xff0c;甚至遇见工作簿没有响应的情况出现。遇见这样的工作簿让人窝火&#xff0c;…

约瑟夫环问题题解

按照1-8顺寻存储&#xff0c;起始位置为3&#xff0c;数到4的人出列。 #include<iostream> using namespace std; typedef struct node {int num;struct node* next; }Node; int main() {int n 8, k 3, m 4;Node*h (Node*)malloc(sizeof(Node));h->num 1;h->n…

java lambda::_基准测试:Java 8 Lambda和流如何使您的代码慢5倍

java lambda::与长期的实现相比&#xff0c;Java 8 lambda和流的性能如何&#xff1f; Lambda表达式和流在Java 8中受到了热烈的欢迎。这些是迄今为止很激动人心的功能&#xff0c;很长一段时间以来&#xff0c;它们就已经应用到Java中了。 新的语言功能使我们可以在代码中采用…

如何在java中实现小数点自增_java编个计算器怎么在加入小数点

展开全部我做的可以运行&#xff0c;你看看吧&#xff01;import java.awt.*;import java.awt.event.*;import java.lang.*;import javax.swing.*;public class Counter extends Frame{//声明三个面板的布局GridLayout gl1,gl2,gl3;Panel p0,p1,p2,p3;JTextField tf1;TextField…

数组中一个属出现奇数次,其他数都出现偶数次.寻找出这个出现奇数次的数

#include<iostream> #include<vector> using namespace std; int singleNumber(vector<int>& nums) {int eo 0;for (auto b : nums)eo ^ b;return eo; }

在Java中使用FileChannel和ByteBuffer对文件进行读写

过去&#xff0c;我讨论过RandomAccessFile以及如何将其用于在Java中进行更快的IO&#xff0c;在本Java NIO教程中&#xff0c;我们将了解如何通过使用FileChannel和ByteBuffer来使用读/写数据。 Channel提供了一种从文件读取数据的替代方法&#xff0c;它提供了比InputStream…

tp5防止sql注入mysql_PHP+Mysql防止SQL注入的方法(life)

这篇文章介绍的内容是关于PHPMysql防止SQL注入的方法&#xff0c;有着一定的参考价值&#xff0c;现在分享给大家&#xff0c;有需要的朋友可以参考一下我的官方群点击此处。方法一&#xff1a;mysql_real_escape_string -- 转义 SQL 语句中使用的字符串中的特殊字符&#xff0…