我以为我以前写过,想复习一下才发现我没写过。。。
直接把我代码贴出来了,注释都写的很清楚了
/***
* 说斐波那契数列三种实现
* 0,1,1,2,3,5,8,13
* 可以得出来结论
* F(0)=0
* F(1)=1
*
* F(2)=F(0)+F(1)=1
* F(3)=F(1)+F(2)=F(1)+( F(0)+F(1) ) = 2
* ......
* F(n)=F(n-2)+F(n-1)
* 这个如果细化分解的话,最终会回归到只有F(0)和F(1)的问题里面去,也就是等号右边全是F(0)和F(1)
*
*
*/
public class Fib {
/**
* 递归实现
* @param n 第n项
* @return
*/
public static int fib1(int n){
if (n<0){
return -1;
}
if (n==0){
return 0;
}
if (n == 1) {
return 1;
}
return fib1(n-2) + fib1(n-1);
}
/**
* 基于变量实现
* 卸磨杀驴型 = = 用完就给你覆盖上
* @param n
* @return
*/
public static int fib2(int n){
if (n<0){
return -1;
}
if (n==0){
return 0;
}
if (n == 1 || n==2) {
return 1;
}
int a = 1;
int b = 1;
int result = 0;
for (int i=3;i<=n;i++){
result = a+b;
a=b;
b=result;
}
return result;
}
/**
* 基于数组实现
* 这个有个好处。
* 如果需要的话,可以直接把整条斐波那契数列全带出来。直接返回数组就可以了
* @param n
* @return
*/
public static int fib3(int n){
if (n<0){
return -1;
}
if (n==0){
return 0;
}
if (n == 1 || n==2) {
return 1;
}
int[] array = new int[n+1];
array[0]=0;
array[1]=1;
array[2]=1;
for (int i=3;i<=n;i++){
array[i]=array[i-2]+array[i-1];
}
return array[n];
}
public static void main(String[] args) {
System.out.println(fib1(6));
System.out.println(fib2(6));
System.out.println(fib3(6));
}
}
网友评论