题目
写一个函数,求斐波那契数列的第n项
函数定义如下:f(0)=0,f(1)=1,f(n)=f(n-1)+f(n-2)
几种解法
利用递归
- 优点
- 书写简洁易懂
- 缺点
- 每次递归会存在大量重复计算,并且这种计算量是随着n指数增大的,效率非常低
- 并且递归方法有可能出现调用栈溢出的状况
- 代码
- 方法一(直接使用递归)
/*
* 方法一直接使用递归
*/
public static int oneFibonacci(int num){
if(num==0){
return 0;
}else if(num==1){
return 1;
}else if(num>1){
return oneFibonacci(num-1)+oneFibonacci(num-2);
}else{
return -1;
}
}
- 方法二
/*
* 方法二:避免函数的重复运算
*/
public static long threeFibonacci(int num){
if(num<=0)return 0;
if(num==1)return 1;
long fb1 = 0;
long fb2 = 1;
long fbn = 0;
for(int i=2;i<=num;i++){
fbn = fb1+fb2;
fb1 = fb2;
fb2 = fbn;
}
return fbn;
}