当前位置: 首页 > news >正文

java编程 斐波拉契数列算法集锦【斐波拉契数列】【下】【集合类】【Stream函数式编程】

斐波那契数列(Fibonacci sequence),又称黄金分割数列,是一个非常经典的递归问题。斐波那契数列的算法描述:
在这里插入图片描述

斐波那契数列,一个令人着迷而又充满神秘色彩的数字序列,它以0和1作为起始,后续的每一个数字都是前两个数字的和。这个看似简单的数列,却蕴藏着自然界中无数令人惊叹的奥秘。
在这里插入图片描述

在自然界中,斐波那契数列无处不在,它像是一个隐形的脉络,贯穿于万物生长的每一个细节之中。你是否注意到,菠萝的果鳞排列呈现出一种特定的规律?那就是斐波那契数列!再看向日葵的种子排列,同样是斐波那契数列的完美展现。这种数列不仅在植物中有所体现,动物界也同样留下了它的足迹。比如,鹦鹉螺的螺旋生长模式,就是斐波那契数列在三维空间中的绝佳例证。下图左边图形是斐波那契数列互相镜像的螺旋线。
在这里插入图片描述
上一篇博客:java编程 斐波拉契数列算法集锦【斐波拉契数列】【上】
好了言归正传,上一篇博客我们已经介绍了不少斐波拉契数列的算法,本文我们再来补充一点。

  1. 算法7:利用集合框架中的Map实现斐波拉契数列的算法。
    这个算法版本利用 Map 的 computeIfAbsent() 方法高效计算斐波那契数列。避免对较小的序列的重复计算。这个算法版本的思想其实与上一篇博客中【算法4: 借助一个数组列表ArrayList,前两项是0和1,从n=2项起,每一项是之前两项之和。实际上也是一种迭代算法】相似。所谓的高效是针对于上篇博客【算法1: 斐波那契数列的递归算法版本】而言的,因为这个算法在计算数列后面的项时需要多次重复计算前面所有的项。
package fibonacci;
/**** @author QiuGen* @description  斐波那契数列的递归算法* *** 使用 Map 的 computeIfAbsent() 方法高效计算* *** 斐波那契数列。避免对较小的序列的重复计算。* @date 2024/8/20* ***/
import java.util.HashMap;
import java.util.Map;
/*** 使用 Map 的 computeIfAbsent() 方法高效计算* 斐波那契数列。避免对较小的序列的重复计算。***/
public class FibonacciMap {private final Map<Integer,Long> map;public FibonacciMap() {map = new HashMap<>();map.put(0, 0L);map.put(1, 1L);} public long addValue(int x) {return map.computeIfAbsent(x, k -> addValue(k-1) + addValue(k-2));} public void printMap() {map.forEach((k,v)->System.out.println(v));}public static void main(String[] args) {System.out.println("***利用集合computeIfAbsent方法的递归算法***");FibonacciMap fibonacci = new FibonacciMap();for (int i = 0; i < 20; i++) {fibonacci.addValue(i);}fibonacci.printMap();}
}

例程测试结果。例程的前20项结果,也是一样的:
在这里插入图片描述

  1. 算法8:函数式编程实现斐波拉契数列算法

首先迭代生成一个包含斐波拉契数列的两项元素Stream<long[]>流

	/***迭代生成斐波那契数列的无限流***/public static Stream<long[]>  fibStream( ) {Stream<long[]> fibStream = Stream.iterate(new long[]{0, 1},fib -> new long[]{fib[1], fib[0] + fib[1]});return fibStream;}

用Collect收集结果,结果保存在List列表中,然后遍历打印结果。

	/**用Collect收集结果**/public static void fibStreamA( ) {List<Long> lst = fibStream().map(fib -> fib[0]).limit(30)   //前30项.collect(ArrayList::new, ArrayList::add,ArrayList::addAll);lst.forEach(System.out::println);}
  1. 算法9:函数式编程转换为LongStream用forEach打印结果的算法
    前面部分产生Stream<long[]>流与算法8相同。
    然后,转换为LongStream用forEach打印结果。
	/**转换为LongStream用forEach打印结果**/public static void fibStreamB( ) {LongStream fibLongStream = fibStream().map(fib -> fib[0]).mapToLong(k->k).limit(30);  //前30项fibLongStream.forEach(System.out::println);}

最后,是算法8和算法9,函数式编程实现斐波拉契数列算法的测试程序的完整源码:

package fibonacci;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.LongStream;
import java.util.stream.Stream;/**** @author QiuGen* @description  斐波那契数列的函数式编程的算法* @date 2024/8/20* ***/
public class FibonacciStream {/***迭代生成斐波那契数列的无限流***/public static Stream<long[]>  fibStream( ) {Stream<long[]> fibStream = Stream.iterate(new long[]{0, 1},fib -> new long[]{fib[1], fib[0] + fib[1]});return fibStream;}/**用Collect收集结果**/public static void fibStreamA( ) {List<Long> lst = fibStream().map(fib -> fib[0]).limit(30)   //前30项.collect(ArrayList::new, ArrayList::add,ArrayList::addAll);lst.forEach(System.out::println);}/**转换为LongStream用forEach打印结果**/public static void fibStreamB( ) {LongStream fibLongStream = fibStream().map(fib -> fib[0]).mapToLong(k->k).limit(30);  //前30项fibLongStream.forEach(System.out::println);}public static void main(String[] args) {fibStreamA();fibStreamB();}
}

相关文章:

java编程 斐波拉契数列算法集锦【斐波拉契数列】【下】【集合类】【Stream函数式编程】

斐波那契数列&#xff08;Fibonacci sequence&#xff09;&#xff0c;又称黄金分割数列&#xff0c;是一个非常经典的递归问题。斐波那契数列的算法描述&#xff1a; 斐波那契数列&#xff0c;一个令人着迷而又充满神秘色彩的数字序列&#xff0c;它以0和1作为起始&#xff…...

智慧园区三维可视化平台

背景 随着物联网、人工智能等新一代信息技术的发展&#xff0c;数字孪生技术逐渐成为实现这一目标的关键工具。数字孪生技术能够对物理世界进行高精度、全要素的映射&#xff0c;并实时动态反映其变化情况&#xff0c;从而为园区提供精准的管理和服务。 方案简介 智慧园区数字…...

Redis 有序集合【实现排行榜】

使用 Redis 的 Sorted Set 数据结构可以非常高效地实现实时排行榜功能。Sorted Set 允许将元素按分数进行排序&#xff0c;同时支持插入、删除和查询操作&#xff0c;且这些操作的时间复杂度较低&#xff0c;非常适合处理高并发的场景。 实现思路 插入操作&#xff1a;当用户…...

ORACLE数据库管理系统介绍

1.ORACLE的特点: 可移植性 ORACLE采用C语言开发而成,故产品与硬件和操作系统具有很强的独立性。从大型机到微机上都可运行ORACLE的产品。可在UNIX、DOS、Windows等操作系统上运行。可兼容性 由于采用了国际标准的数据查询语言SQL,与IBM的SQL/DS、DB2等均兼容。并提供读取其它…...

C# 中Linq探讨 Or条件拼接

在C#中&#xff0c;没有直接内置于.NET Core或.NET Framework中的NuGet包能够直接“拼接”LINQ的OR条件&#xff0c;因为LINQ本身设计为一种声明式编程模型&#xff0c;用于查询数据集合。然而&#xff0c;你可以通过一些方式来实现多个条件以OR逻辑组合的效果&#xff0c;而不…...

有关应用层面试题有关库的思维导体

面试题目&#xff1a; TCP通信中3次握手和四次挥手&#xff1f; 答&#xff1a; 第一次握手&#xff1a;客户端发送SYN包&#xff08;SYN1, seq0&#xff09;给服务器&#xff0c;并进入SYN_SENT状态&#xff0c;等待服务器返回确认包。第二次握手&#xff1a;服务器接收到S…...

记一次 SAP BP 编号范围错误引发的一个问题 GET_NRIV_LINE

本来想着循着错误提示去排查&#xff0c;但是还是想看看业务发生了什么&#xff0c;他们的操作是否有问题&#xff0c;不经意间发现 号码段是有问题的&#xff0c;由此大概可以判断是他们编号范围和类型之间的问题 角色和分组是否一致的&#xff0c;如果不一致就发生了以上错误…...

(17)ELK大型储存库的搭建

前言&#xff1a; els是大型数据储存体系&#xff0c;类似于一种分片式存储方式。elasticsearch有强大的查询功能&#xff0c;基于java开发的工具&#xff0c;结合logstash收集工具&#xff0c;收集数据。kibana图形化展示数据&#xff0c;可以很好在大量的消息中准确的找到符…...

每日一问:Kafka消息丢失与堆积问题分析(简化版)

Kafka 消息系统问题解析 在本篇博客中&#xff0c;我们将深入探讨 Kafka 中常见的两大问题&#xff1a;消息丢失和消息堆积。首先&#xff0c;我们将简要介绍 Kafka 的基本工作原理&#xff0c;随后分别分析消息丢失和堆积的原因&#xff0c;并提供针对性的解决方案。 关于其详…...

C语言中函数sizeof和strlen区别

sizeof和strlen是C语言中的两个常用函数&#xff0c;它们的作用和使用方式有所不同。 sizeof sizeof是一个运算符而非函数&#xff0c;用于计算数据类型或变量占用的字节数。它可以计算任意数据类型&#xff08;包括基本类型、自定义结构体、数组等&#xff09;的大小。例如&…...

RAG与LLM原理及实践(14)---- Python + MinIO + Kafka进阶

目录 背景 根因分析 配置 构造 创建 network 构造 zookeeper 构造 kafka 参数构造 原理解析 图解 全过程解析 工具使用 kafkacat 查看 broker python 实现 python send + kafka recv python 代码 kafka recv 运行效果 python recv + kafka send python 代…...

接口自动化-代码实现

接口自动化基础 1、接口自动化测试 接口自动化&#xff1a;使用工具或代码代替人对接口进行测试的技术测试目的&#xff1a; 防止开发修改代码时引入新的问题测试时机&#xff1a; 开发进行系统测试转测前&#xff0c;可以先进行接口自动化脚本的编写开发进行系统测试转测后&…...

如何查看linux大文件

文章目录 一、查看存储情况二、查看指定路径下的文件大小查看临时文件和日志的大小 三、查找home目录下文件大小大于100M的大文件四、查看INNODE使用情况五、查看进程使用情况查看所有进程查看特定进程杀死相关进程 六、清除缓存操作七、 查看docker的硬盘占用情况详细查看 一、…...

生成式人工智能服务大模型备案答疑

问&#xff1a;大模型备案范围 答&#xff1a;利用生成式人工智能技术向中华人民共和国境内公众提供生成文本、图片、音频、视频等内容的服务&#xff0c;适用本办法。 未向境内公众提供生成式人工智能服务的&#xff0c;不适用本办法的规定。 ps&#xff1a;生成式人工智能…...

QT-贪吃蛇小游戏

QT-贪吃蛇小游戏 一、演示效果二、核心代码三、下载链接 一、演示效果 二、核心代码 #include "Food.h" #include <QTime> #include <time.h> #include "Snake.h"Food::Food(int foodSize):foodSize(foodSize) {coordinate.x -1;coordinate.…...

虚幻5|AI视力系统,听力系统,预测系统(1)视力系统

继宠物伴随系统初步篇后续 虚幻5|AI巡逻宠物伴随及定点巡逻—初步篇-CSDN博客 一&#xff0c;听力系统 1.打开宠物ai的角色蓝图 2.选中ai感知组件 右侧细节&#xff0c;找到ai感知&#xff0c;添加感知配置&#xff0c;我们需要的是ai视力配置 3.选中左侧创建的ai感知组件&…...

IC rankIC

IC IC衡量的是预测值和实际值之间的相关系数 计算公式为&#xff1a;IC Pearson(R(predicted),R(actual)) 取值范围&#xff1a;[-1, 1]&#xff0c;其中1表示完全相关&#xff0c;也就是预测值和实际值完全一样。0表示完全不相关&#xff0c;-1表示&#xff0c;反向相关 ra…...

Windows服务器IIS7下如何查看真实报错原因

背景 IIS7默认为友好报错&#xff0c;或只报错代码。如500错误&#xff0c;401错误等。根据这些错误无法定位真实原因&#xff0c;故而需要显示真实的错误信息。 解决方案 以500错误为例说明。 1、打开IIS,点全局设置中的"错误页"(注意必须是全局网站)。 2、右击50…...

深度学习设计模式之策略模式

文章目录 前言一、介绍二、特点三、详细介绍1.核心组成2.代码示例3.优缺点优点缺点 4.使用场景 总结 前言 策略模式定义一系列算法&#xff0c;封装每个算法&#xff0c;并使它们可以互换。 一、介绍 策略模式&#xff08;Strategy Pattern&#xff09;是一种行为型设计模式&…...

Linux 下安装miniconda(少走弯路)

Miniconda 和 Conda 都是用于管理 Python&#xff08;及其他语言&#xff09;环境和包的工具。 conda对于我来说是太臃肿了&#xff0c;很多的包我不会使用&#xff0c;所以选择安装miniconda是一个较好的选择。 下面是linux安装miniconda的实际操作。 在以下的网站&#xf…...

java ssl使用自定义证书

1.证书错误 Caused by: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target 2.生成客户端证书 openssl x509 -in <(openssl s_client -connect 192.168.11.19:8101 -prexit 2>/dev/null) -ou…...

【ARM+Codesys 客户案例 】基于RK3568/A40i/STM32+CODESYS开发的控制器在自动输送分拣系统上的应用,支持定制

2021年“京东618” 累计下单金额超3438亿元,再次刷新纪录! 从下单到收货&#xff0c;各种货品均可在短短几天内通过四通八达的物流网络送达全国任何一个家庭。电子商务和快递物流的迅猛发展对仓储、分拣、配送效率和准确性均提出了更高的要求&#xff0c;加速了智能物流的发展。…...

C++ 设计模式(1. 单例模式)

单例模式是一种创建型设计模式&#xff0c; 它的核心思想是保证一个类只有一个实例&#xff0c;并提供一个全局访问点来访问这个实例。 特点 全局访问点的意思是&#xff0c;为了让其他类能够获取到这个唯一实例&#xff0c;该类提供了一个全局访问点&#xff08;通常是一个静态…...

算法笔记|Day31动态规划IV

算法笔记|Day31动态规划IV ☆☆☆☆☆leetcode 1049.最后一块石头的重量II题目分析代码 ☆☆☆☆☆leetcode 494.目标和题目分析代码 ☆☆☆☆☆leetcode 474.一和零题目分析代码 ☆☆☆☆☆leetcode 1049.最后一块石头的重量II 题目链接&#xff1a;leetcode 1049.最后一块石…...

CSS文字方向控制属性text-orientation

在CSS中&#xff0c;text-orientation 属性主要用于控制文本的方向&#xff0c;特别是当文本被设置为垂直排列时。这个属性主要用于东亚语言的排版&#xff0c;比如中文、日文和韩文&#xff0c;这些语言在垂直书写时&#xff0c;字符的排列方向可能与拉丁文字不同。 text-ori…...

配置typora上传图片到Chevereto图床

目录 一、下载安装PicGo二、配置PicGo三、配置Typora 一、下载安装PicGo PicGo下载地址点击进入 进入官网后点击下载&#xff0c;会跳转到GitHub,如图,选择对应的操作系统版本下载 下载完成后单击安装&#xff08;本文已windows系统为例&#xff09; 二、配置PicGo 点击插件设…...

Java面试八股之如何保证消息队列中消息不重复消费

如何保证消息队列中消息不重复消费 要保证消息队列中的消息不被重复消费&#xff0c;通常需要从以下几个方面来着手&#xff1a; 消息确认机制&#xff1a; 对于像RabbitMQ这样的消息队列系统&#xff0c;可以使用手动确认&#xff08;manual acknowledge&#xff09;机制来…...

0.91寸OLED迷你音频频谱

一、简介 音频频谱在最小0.91寸OLED 屏幕上显示&#xff0c;小巧玲珑 二、应用场景 本模块为音频频谱显示模块&#xff0c;用来获取声音频谱并展示频谱&#xff0c;跟随音乐声音律动 三、产品概述 基于主控芯片设计的将声音采集分析频谱&#xff0c;显示到0.91寸OLED的功能…...

机器学习--特征工程常用API

1. DictVectorizer - 字典特征提取 DictVectorizer 是一个用于将字典&#xff08;如Python中的字典对象&#xff09;转换为稀疏矩阵的工具&#xff0c;常用于处理类别型特征。 DictVectorizer(sparseTrue, sortTrue, dtype<class numpy.float64>)参数&#xff1a; spar…...

块级LoRA:个性化与风格化在文本到图像生成中的新突破

人工智能咨询培训老师叶梓 转载标明出处 文本到图像生成技术的核心目标是教会预训练模型根据输入的文本提示生成具有特定主题和风格的新颖图像。尽管已有多种微调技术被提出&#xff0c;但它们在同时处理个性化和风格化方面仍存在不足&#xff0c;导致生成的图像在个人身份和风…...

wordpress自定义字段使用/江苏seo技术教程

前端算法也很重要&#xff0c;受别人☛汕大小吴的启发&#xff0c;觉得还是自己整理记录较为清晰&#xff0c;同时也督促自己不断学习。 题目描述 在一个二维数组中&#xff08;每个一维数组的长度相同&#xff09;&#xff0c;每一行都按照从左到右递增的顺序排序&#xff0c;…...

广州市专业做网站/外贸获客软件

css 选择器 1- 基础选择器 1- ID选择器 // #id 2- 类名选择器 // .class 3- 元素选择器 // element 4- 全局选择器 // * 5- 并集选择器selector1,selector2 //选择满足选择器1条件的元素&#xff0c;也选择满足选择器2条件的元素&#xff0c;一起选择到统一…...

ppt设计网站有哪些/培训心得体会800字

在Hive目录中的命令&#xff1a; hive -e “select * …” 执行一条sql语句 hive -f “/x/xxx.hql” 执行一个文件&#xff0c;例如外部脚本 Hive shell中&#xff1a; 直接使用sql语句&#xff1a; create database logs 库会自动创在/user/用户名/warehouse/logs.db 创建…...

wordpress主题W3C/口碑营销案例ppt

ReplicatorG是一款简单易用的3d打印机控制软件&#xff0c;软件旨在帮助用户向其RepRap或CNC机器发出命令。该程序支持大多数常见的3D打印机&#xff0c;并且可以通过内置功能上传新固件。其还具有估计时间、模拟打印、生成代码、打印、暂停、停止、GCode生成器、编辑分层配置、…...

wordpress 如何安装教程视频/关闭站长工具seo综合查询

在项目开发过程中&#xff0c;我们难免会用到自己去制作自定义的VIEW控件&#xff0c;之后我们别的项目如果需要的话就直接将其复制到对应的项目中使用&#xff0c;虽说这么做是一个解决问题的方法&#xff0c;但毕竟不是很好。 原因是&#xff0c;当我们项目积累越来越多&…...

绵阳市住房和城乡建设局网站/推广引流app

在领英加人时会发现邀请发出去后&#xff0c;通过的人很少&#xff0c;通过率很低&#xff0c;不像微信的通过率那么高。 领英通过率低的原因主要有以下几点&#xff1a; 领英相比其它平台的通过率本身就要低很多&#xff1b;领英是职业社交平台&#xff0c;使用的人大多是在工…...