斐波那契数列
n>1,F(n)=F(n-1)+F(n-2);
F(0)=0;
F(1)=1;
求第n个斐波那契数
利用已知的斐波那契数的递推公式即可
public class Fibonacci {
public static int getFib(int n){
if(n==0)
return 0;
else if(n==1)
return 1;
else
return getFib(n-1)+getFib(n-2);
}
public static void main(String[]agrs){
int n=10;
System.out.println(getFib( n));
}
}
递归法求解过程中,可知存在重复求解相同的函数值的情况,导致效率低下。
故利用一个数组存储函数值,利用空间换取时间
public class Fibonacci1 {
public static int getFib(int n ){
int len=n+1;
int f[]=new int[len];
f[0] = 0;
f[1] = 1;
for (int i = 2; i <= n; i++) {
f[i] = f[i - 1] + f[i - 2];
}
return f[n];
}
public static void main(String[]agrs){
int n=10;
System.out.println(getFib( n));
}
}
又由于只是需要获取第n个斐波那契数,而计算F(n)只需要F(n-1)和F(n-2)的值,可利用last以及nextToLast来保存F(n-1)和F(n-2)的值,并不需要整个数组来保存所有的斐波那契数
getFib(int n )代码可更改为:
public static int getFib(int n){
if(n<=1){
return 1;
}
int last=1;
int nextToLast=1;
int answer=1;
for(int i=2;i<=n;i++){
answer=last+nextToLast;
nextToLast=last;
last=answer;
}
return answer;
}