Java实现“斐波那契数列”的方法(循环,递归,优化递归)
1、循环方式获得斐波那契数列某位的数
public static int fibo(int n){int[] nums = new int[n];for (int i = 0; i < n; i++) {if(i==0 || i==1)nums[i]=1; //第一和第二位填入1elsenums[i]=nums[i-1]+nums[i-2]; //除第一第二位外其余数据等于前两位之和}return nums[n-1];}
耗时最长的方法,同时也是最简单的方法
2、递归方式获取斐波那契数列某位的数
public static int fibo(int n){if(n==1 || n==2)return 1;else{return fibo(n-1)+fibo(n-2);}}
相比于普通循环的方式来说耗时更短
3、优化递归方式获取斐波那契数列某位的数
public static int fibo(int n,int[] nums){if(n==1 || n==2)return 1;if(nums[n-1]>0){return nums[n-1];}nums[n-1] = fibo(n-1,nums)+fibo(n-2,nums);return nums[n-1];}
在斐波那契数列这个案例中,很多数据会被重复计算,影响效率。比如f(3) 被重复计算两次。
f(5) = f(4) + f(3)
f(4) = f(3) + f(2)
如果你使用递归的时候不进行优化,会有非常多的子问题被重复计算的。因此,使用递归的时候,必要须要考虑有没有重复计算,如果重复计算了,一定要把计算过的状态保存起来。通过数组将数据保存起来,在读取的时候只需要通过下标读取数组中的数即可,极大的消除了不必要的重复运算。
Java实现“斐波那契数列”的方法(循环,递归,优化递归)相关推荐
- java判断斐波那契数列_Java 实例 - 斐波那契数列
Java 实例 - 斐波那契数列 斐波那契数列指的是这样一个数列 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233,377,610,987,1597, ...
- 用程序猿思维、程序设计师思维两种方式写求斐波那契数列的方法。
//用Java实现斐波那契数列(Fibonacci) public class Test {public int f(int n)//n代表第几个数字.程序返回它相应的值{return n>2? ...
- Java实现斐波那契数列Fibonacci
import java.util.Scanner; public class Fibonacci {public static void main(String[] args) {// TODO Au ...
- Think in Java之斐波那契数列
斐波纳契数列(Fibonacci Sequence),又称黄金分割数列. 指的是这样一个数列:1.1.2.3.5.8.13.21.--这个数列从第三项开始,每一项都等于前两项之和. 在数学上,斐波纳契 ...
- 【java】斐波那契数列
开门见山 斐波那契数列(Fibonacci sequence),又称黄金分割数列,因数学家莱昂纳多·斐波那契(Leonardo Fibonacci)以兔子繁殖为例子而引入,故又称为"兔子数列 ...
- java实现斐波拉契数列
package algorithm.cxg.Fibonacci;import java.util.Scanner;/*** 实现斐波拉切函数* 斐波拉切数列:* 由0和1开始,之后的费波那西系数就由之 ...
- Java实现斐波那契数列与黄金分割比精确位数问题
题目: 打印输出斐波拉契数列的位数,以及对应的黄金分割值的准确位数,例如(11,4),既是利用11位的斐波拉契数列计算得到的黄金分割数可以准确到小数点后四位.设定一个具体的精确度(例如小数点后10位) ...
- JAVA实现斐波那契数列问题(《剑指offer》)
题目描述: 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项. 传说中的斐波那契数列问题,经典中的经典: 做多了基于斐波那契数列问题的变形题目,现在要干撸斐波那契数列,突然 ...
- java解决斐波那契数列(Fibonacci sequence)
斐波那契数列(Fibonacci sequence)的定义:斐波那契数列指的是这样一个数列 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233,377,610 ...
- Java基础——斐波那契数列问题之兔子不死会有几只兔子
已知:斐波那契数列的前几个数分别为0,1,1,2,3,5-从第三项开始,每一项都等于前两项的和.请接收用户输入的整数n,求出此数列的前n项. 效果如图: 思路:// 0, ...
最新文章
- Java 8按属性区分
- 前端学习(2387):组件库使用说明
- 你只会用 StringBuilder?试试 StringJoiner,真香!
- 飘逸的python - 简明gzip模块压缩教程
- 提高语音识别率:必须加入深度学习吗?
- 31、Arrays数组排序(续)——自定义排序
- h61 nvme硬盘_移动硬盘怎么选?看完这篇不踩坑
- iOS 战斗机跑车效果
- ios13短信如何转移到android,iOS13加入全新数据迁移功能,无需网络也能转移旧手机数据...
- 三维动画与企业宣传片的制作方案
- 超大型生鲜配送软件源码
- uni-app微信小程序扫普通二维码分享小程序
- 利用Aria2和旧电脑打造一台下载机
- 零基础学日语资料附经验分享
- 求1到n的素数个数C语言,求 1~n 之间素数的个数
- 计算机领域的术语与缩写,计算机和生活常用缩写与术语
- 《被讨厌的勇气》- 要有被讨厌的勇气
- 猜帽子颜色问题(阿里巴巴面试题)
- 关于:first-child的误区
- linux 学习笔记 (二)