首页 > 编程语言 >【代码+详解】算法题 : 菲波那契数列

【代码+详解】算法题 : 菲波那契数列

时间:2024-06-03 10:59:28浏览次数:14  
标签:契数 数列 int fib 详解 菲波 那契

❗❗❗必看:
下列题我全部都使用 Java 语言写的,并且均可以提交成功,获得Accepted 结果的. 如果代码和详解看了之后,对答案有任何疑问,都可以在评论区提出来,我都会一个一个回答.

❗❗❗感谢大家的支持,如果喜欢我的博客,关注 点赞 收藏 评论一波,非常感谢!!!

文章目录

题目:菲波那契数列

菲波那契数列是指这样的数列: 数列的第一个和第二个数都为1,接下来每个数都等于前面2个数之和。
给出一个正整数a,要求菲波那契数列中第a个数是多少。

Input

第1行是测试数据的组数n,后面跟着n行输入。每组测试数据占1行,包括一个正整数a(1 <= a <= 20)

Output

输出有n行,每行输出对应一个输入。输出应是一个正整数,为菲波那契数列中第a个数的大小

测试样例

输入

4
5
2
19
1

输出

5
1
4181
1

代码

import java.util.Scanner;
//斐波那契数列
public class Main {
	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		int n = scanner.nextInt();
		for(int i = 0;i<n;i++) {
			System.out.println(fib(scanner.nextInt()));
		}
				
	}

	private static int  fib(int n) {
		if(n<=1) {
			return 1;
		}
		
		int fib = 1;
		int prefib = 1;
		
		for(int i = 2;i<n;i++) {
			int temp = fib;
			fib+=prefib;
			prefib = temp;
			
		}
		return fib;
	}
}

详解

初步思路

利用迭代的方法生成菲波那契数列,这样可以在较低的时间复杂度内计算出第a个菲波那契数。

具体步骤

  1. 输入解析

    • 读取测试数据的组数n,然后逐一读取每组测试数据的正整数a。
  2. 计算菲波那契数

    • 对于每个输入的a,使用迭代方法计算第a个菲波那契数:
      • 如果a小于等于1,直接返回1(因为菲波那契数列的前两个数都是1)。
      • 对于其他情况,使用两个变量fib和prefib分别保存当前的菲波那契数和前一个菲波那契数,并通过循环逐步更新这两个变量直到计算出第a个菲波那契数。
  3. 输出结果

    • 对每组输入,输出对应的菲波那契数。

总结方法

通过迭代法计算菲波那契数列的优点在于其时间复杂度为O(a),比递归方法的指数级增长要高效得多。对于较小的a(如本题中的a最大值为20),这种方法在计算上是非常快速且可靠的。

此外,利用变量交换的方式减少空间复杂度,使得算法只需常量空间即可完成。迭代法不仅简单易懂,而且在处理较小范围的数列问题时表现非常优异。

标签:契数,数列,int,fib,详解,菲波,那契
From: https://blog.csdn.net/weixin_75202470/article/details/139380250

相关文章

  • RabbitMQ的详解和使用
    一、什么是MQ?1、MQ的概念MQ全称MessageQueue(消息队列),是在消息的传输过程中保存消息的容器。多用于系统之间的异步通信。下面用图来理解异步通信,并阐明与同步通信的区别。同步通信:甲乙两人面对面交流,你一句我一句必须同步进行,两人除此之外不做任何事情 异步通信:异步通信......
  • AVL 树详解
    1AVL树的概念二叉搜索树虽可以缩短查找的效率,但如果数据有序或接近有序二叉搜索树将退化为单支树,查找元素相当于在顺序表中搜索元素,效率低下。因此,两位俄罗斯的数学家G.M.Adelson-Velskii和E.M.Landis在1962年发明了一种解决上述问题的方法:当向二叉搜索树中插入新结点后,......
  • JS-11-es6常用知识-Promise(6K字超级详解!!)
    文章目录1回调地狱2 Promise函数基本用法3 Promise函数实现多层回调 4Promise传参5 Promise错误处理5.1两种错误处理方式5.2catch捕获错误5.3多层异步种使用catch6使用Promise的优势1回调地狱1)为什么要有promise?  解决(回调地狱)的问题 2)什......
  • 【Flutter】路由详解
    ......
  • [AIGC] 广度优先搜索(Breadth-First Search,BFS)详解
    广度优先搜索(Breadth-FirstSearch,简称BFS)是一种用于图或者树的搜索算法,它的特点是按照“广度”进行搜索,即在扩展搜索路线的时候,BFS会先考虑当前节点的所有邻近节点,也就是说,它逐层地进行搜索。文章目录基本原理实现方法应用场景总结基本原理广度优先搜索的基本......
  • 详解C语言system()函数,一个函数让初学者的代码有趣(一)
    一.为什么一定要学习system()函数             对于绝大多数初学者来说,我们在学习C语言的过程中,所写出来的内容大多都只能展现在冰冷的黑白程序框中,所实现的功能也是千篇一律,如果只是完成学习任务,那就够了,但是对于一个希望写出来一点高级东西的程序员,那是远......
  • MySQL 权限详解
    All/AllPrivileges权限代表全局或者全数据库对象级别的所有权限Alter权限代表允许修改表结构的权限,但必须要求有create和insert权限配合。如果是rename表名,则要求有alter和drop原表,create和insert新表的权限Alterroutine权限代表允许修改或者删除存储过程、函数的权限Create......
  • 预处理详解
    目录1.预定义符号2.#define定义常量3.#define定义宏4.带有副作⽤的宏参数5.宏替换的规则6.宏函数的对比7.#和##7.1#运算符7.2##运算符8.命名约定9.#undef10.命令⾏定义11.条件编译12.头文件的包含12.1头⽂件被包含的方式:12.1.1本地⽂件包含12.1.2库文......
  • log4net的配置详解
    log4net是Apache的C#日志系统,下面是详细配置:一,用Nuget安装log4net:12二,修改App.config文件,添加配置项,下面是完整的配置文件内容:<?xmlversion="1.0"encoding="utf-8"?><configuration> <configSections> <sectionname="log4net"type="......
  • 插入排序详解及Java代码实现
    在计算机科学中,排序是一种基本的操作,它广泛应用于各种数据处理场景。插入排序(InsertionSort)是一种简单直观的排序算法,它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插入排序在实现上,通常采用in-place排序(即只需用到O(1)的......