题目描述
题目描述: 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0)。n<=39
规律发现
- 思路:
最简单的的想法是通过递归函数实现,但是递归函数存在严重的时间效率问题,当n增大时,时间复杂度以n的指数的方式递增。因此,这不是一个好的方法,递归方法之所以慢,是因为重复的计算太多,提升时间效率的方法是把已经的得到的中间项保存起来,在下次需要计算的时候先查找一下,如果前面已经计算过就不用再重复计算了。
完整代码展示
public class N7斐波那契数列 {
public static long fibonacci(int n){
//当输入非正整数的时候返回0
if(n < 0)
return 0;
//输入1或者2的时候返回1
int[] a={0,1};
if(n < 2)
return a[n];
//记录第n-2的fibonacci数的值
long FabOne = 0;
//记录第n-1的fibonacci数的值
long FabTwo = 1;
//记录第n的fibonacci数的值
long FabN = 1;
//把递归的方法用循环实现
for(int i=2;i<=n;i++){
//求第i个fibonacci数的值
FabN = FabOne + FabTwo;
//更新记录的结果,源prePre原先记录第i-2个fibonacci数的值
//现在记录第i-1个fibonacci数的值
FabOne = FabTwo;
//更新记录的结果,源pre原先记录第i-1个fibonacci数的值
//现在记录第i个fibonacci数的值
FabTwo = FabN;
}
//返回所求的结果
return FabN;
}
//斐波拉契数列的递归写法
public long fibonacci1(long n){
long fabN = 0;
if(n <= 0)
fabN = 0;
else if(n==1)
fabN = 1;
else
fabN = fibonacci1(n-1) + fibonacci1(n-2);
return fabN;
}
public static void main(String[] args) {
N7斐波那契数列 f = new N7斐波那契数列();
long x = f.fibonacci(38);
long x1 = f.fibonacci1(38);
System.out.println(x);
System.out.println(x1);
}
}