经典算法
前言
就算法而言,我们主要学习的是数学+思维+逻辑+数据结构实现功能,所以我们主要学习是思维也是解决问题的思路,然后用逻辑去实现它。
提示:以下是本篇文章正文内容,下面案例可供参考
一、什么是斐波那契数列?
百度一下:斐波那契数列(Fibonacci sequence),又称黄金分割数列,因数学家莱昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:0、1、1、2、3、5、8、13、21、34、……在数学上,斐波那契数列以如下被以递推的方法定义:F(0)=0,F(1)=1, F(n)=F(n - 1)+F(n - 2)(n ≥ 2,n ∈ N*)在现代物理、准晶体结构、化学等领域,斐波纳契数列都有直接的应用,为此,美国数学会从 1963 年起出版了以《斐波纳契数列季刊》为名的一份数学杂志,用于专门刊载这方面的研究成果。
二、实现代码
也就是说 0 1 1 2 3 5…这样累加然后取指定项的结果集
下面分别介绍3种实现方式,注意好好分析这3种的逻辑。
1.数组写法
public class 斐波那契数列 {
public static void main(String[] args) throws Exception {
int[] a=new int[20];
//数据19位值的数据,也就是20项的结果
fun1(a);
}
/**
* 数组写法
*/
public static void fun1(int[] a){
a[0]=1;
a[1]=1;
for(int i=2;i<a.length;i++){
a[i]=a[i-1]+a[i-2];
}
//打印结果
System.out.println(a[a.length-1]);
}
}
输出结果;
2.递归算法(牢记) 能够提高效率
public class 斐波那契数列 {
public static void main(String[] args) throws Exception {
int f = fun(30);
System.out.println(f);
}
/**
*递归算法(牢记) 能够提高效率
*Functions:斐波那契数列: 1 1 2 3 5.....返回斐波那契数列的第20项数值
*/
public static int fun(int a) throws Exception {
if(a==0){
throw new Exception("参数异常错误"); //自定义异常
}
if(a==1||a==2) {
return 1;
}else{
return fun(a-1)+fun(a-2);
}
}
}
输出结果:
2.前后倒置效率最高!!!!!(优先使用)
public class 斐波那契数列 {
public static void main(String[] args) throws Exception {
int f = fun2(35);
System.out.println(f);
}
/**
*效率最高!!!!!(优先使用)
*/
public static int fun2(int n){
if(n<=1) return n;
int first=0; //0位
int second=1; //1位
for(int i=0;i<n-1;i++){
int sum=first+second; //求出数字值2=1+1
first=second; //然后将下角标的第2个位置,推到第一个位置,这样第二个位置就空出来了
second=sum; //然后将总和推到空出来的第二个位置,这样就是second的值了,也是我们要求的值
}
return second;
}
}
输出结果:
总结
这三种都可实现 0 1 1 2 3 5…这样累加然后取指定项的结果逻辑,但是他们的思想是不一样的,也就是说解决问题的方式不一样,代码运行起来消耗CPU的资源也不一样,所以说这三种从资源消耗来讲是由高到低的,时间负责度是O(n)。