题意:
输入一个正整数 n ,请你输出斐波那契数列的第 n 项。
方法一:
直接遍历
思路:设初值第一项x=1,第二项y=1。每次都用x和y生成新的y(即前两项生成第三项),并使原先的y 变为x。
循环遍历。
class Solution {
public:
int Fibonacci(int n) {
int x=1,y=1,t;//设初值第一项x=1,第二项y=1
for(int i=3;i<=n;i++){
t=y;
y=x+y;//x和y生成新的y
x=t;//原先的y 变为x
}
return y;
}
};
时间复杂度:
空间复杂度:![]()
方法二:
公式推导
思路:
将斐波那契数列展开,如下:![]()
这里的只能应用于偶数的情况,而奇数情况会计算错误。
因此,我们需要将 n 分成奇数和偶数两种情况:
class Solution {
public:
int Fibonacci(int n) {
if(n<=2)
return 1;
if(n%2==0)//偶数
return Fibonacci(n/2)*Fibonacci(n/2+1)+Fibonacci(n/2-1)*Fibonacci(n/2);
else//奇数
return Fibonacci((n+1)/2)*Fibonacci((n+1)/2)+Fibonacci((n-1)/2)*Fibonacci((n-1)/2);
}
}; 时间复杂度:
空间复杂度:



京公网安备 11010502036488号