题目:定义Fibonacci 数列如下:
/ 0 n=0f(n)= 1 n=1,2
\ f(n-1)+f(n-2) n>2
输入n,用最快的方法求该数列的第n 项。
using namespace std;
/*方法1:递归
* 递归法的优点是:简洁容易理解,缺点是时间复杂度太大,随着n越来越大,耗时也越来越多*/
int Fibona(int n)
{
if(n==0)
{
return 0;
}
else if(n==1||n==2)
{
return 1;
}
else
{
return Fibona(n-1)+Fibona(n-2);
}
}
int main()
{
cout<<Fibona(9)<<endl;
return 0;
}
* 递推法也叫迭代法,时间复杂度为o(n)相比递归,时间复杂度减少很多,*/
int Fibona(int n)
{
int i;
int pre=1;
int sed=1;
int cur=0;
if(n==0)
{
return 0;
}
if(n==1 | n==2)
{
return 1;
}
for(i=3;i<=n;i++)
{
cur=pre+sed;
pre=sed;
sed=cur;
}
return cur;
}
int main()
{
cout<<Fibona(9)<<endl;
return 1;
}