题解:
这个题的常规思路很简单,就是写出来斐波那契数的表达式然后直接进行递归处理
斐波那契数列的标准公式为:F(1)=1,F(2)=1, F(n)=F(n-1)+F(n-2)(n>=3,n∈N*)
根据公式可以直接写出:
public class Solution {
public int Fibonacci(int n) {
if(n==1){
return 1;
}
else if(n==0){
return 0
}
else
return Fibonacci(n-1) + Fibonacci(n-2);
}
}
可以看出来复杂度过高,首先我们来优化时间复杂度,很简单,因为递归有大量的重复运算,我们精简一些操作,具体精简可以看一下代码
public class Solution {
public int Fibonacci(int n) {
int ans[] = new int[40];
ans[0] = 0;
ans[1] = 1;
for(int i=2;i<=n;i++){
ans[i] = ans[i-1] + ans[i-2];
}
return ans[n];
}
}
看得出来,时间复杂度明显下降,我们再来进行精简空间操作,具体精简过程如下代码所示
public int Fibonacci(int n) {
int ans=0;
int temp1=0;
int temp2=1;
for(int i=2;i<=n;i++){
ans=temp1+temp2;
temp1=temp2;
temp2=ans;
}
return ans;
}
还可以在优化一些空间,但是个人觉得用处不是特别大了,不过还是也贴出来
public int Fibonacci(int n) {
if(n==0){
return 0;
}
if(n==1){
return 1;
}
int ans=1;
int temp1=0;
for(int i=2;i<=n;i++){
ans=temp1+ans;
temp1=ans-temp1;
}
return ans;
}
博客介绍了如何优化斐波那契数列的递归算法,通过避免重复计算降低时间复杂度,并进一步简化空间操作。文章提供了代码示例以展示优化过程。

被折叠的 条评论
为什么被折叠?



