变量法(最最最基础)
很简单的一道题目,如下:
菲波那契数列是指这样的数列: 数列的第一个和第二个数都为 1,接下来每个数都等于前面2个数之和。
给出一个正整数 k,要求菲波那契数列中第 k 个数是多少。(1<=k<=46)
题目怎么说就怎么做:
#include<bits/stdc++.h>
using namespace std;
int main()
{
int k;
int a=1,b=1,temp;
int i;
cin>>k;
for(i=3; i<=k; i++)
{
temp=a+b;
a=b;
b=temp;
}
cout<<b<<endl;
return 0;
}
递归法
#include<bits/stdc++.h>
using namespace std;
int f1(int n)
{
if(n <= 2)
return 1;
else
return f1(n-1) + f1(n-2);
}
int main(){
int n;
cin>>n;
cout<<f1(n);
return 0;
}
递推法
#include<bits/stdc++.h>
using namespace std;
int Fib(int n){
int f0=0,f1=1,f,i;
if(n==0||n==1)
{
return n;
}
for(i=2;i<=n;i++)
{
f=f0+f1; //由前两步结果推出当前结果
f0=f1; //原前一步当作下一次的前两步
f1=f; //当前结果当作下一次的前一步
} //在进行向前传递时,要注意传递的时序
return f;
}
int main(){
int n;
cin>>n;
printf("%d",Fib(n));
return 0;
}
公式法
// 太懒了,不想再打一遍了
ll Fibonacci_generalItem(int n)
{
double sqrt5 = sqrt(5);
double fibN = pow((1 + sqrt5) / 2, n) - pow((1 - sqrt5) / 2, n);
return round(fibN / sqrt5); // 四舍五入
}
有需要的话请点个赞,谢谢!