题目描述
大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0)。
n<=39
斐波拉契数列就是0,1,1,2,3,5,8,13,……的数列,后一项等于前两项之和。
递归解题
此题较为简单。博主首先用的是递归
直接贴代码了。
public class Solution {
public int Fibonacci(int n) {
if(n==0){
return 0;
}else if(n==1||n==2){
return 1;
}else {
return Fibonacci(n-1)+Fibonacci(n-2);
}
}
}
我们可以看到虽然代码通过,但是运行时间高达742ms。
循环解题
然后博主在评论区看到可以用循环来解。
代码如下
public class Solution {
public int Fibonacci(int n) {
int prepre_num=0;
int pre_num=1;
int result=0;
if(n==0){
return 0;
}
if(n==1){
return 1;
}
for(int i=2;i<=n;i++){
result = prepre_num + pre_num;
prepre_num = pre_num;
pre_num = result;
}
return result;
}
}
运行结果如下
我们可以看到运行时间仅为15ms。大大节省了运行时间,比递归更好。