#include<iostream>
#include<cmath>
//{
// if(num==1||num==2)
// return 1;
// else
// return def(num-1)+def(num-2);
{
// int arr[1000];
// memset(arr,0,sizeof(arr));
// if(num==1||num==2)
// return 1;
// if(arr[num])
// return arr[num];
// return arr[num]=def(num-1)+def(num-2);
//{//滚动数组
// int arr[3];
// arr[1]=arr[2]=1;
// for(int i=3;i<=num;i++)
// {
// arr[i%3]=arr[(i-1)%3]+arr[(i-2)%3];
// }
// return arr[num%3];
//{
// int arr[1000];
// memset(arr,0,sizeof(arr));//以空间换时间,时间复杂度o(n)
// arr[1]=arr[2]=1;
// for(int i=3;i<=num;i++)
// arr[i]=arr[i-1]+arr[i-2];
// return arr[num];
{
return (int)(1.0/sqrt(5.0)*(pow((1+sqrt(5.0))/2,num)-pow((1-sqrt(5.0))/2,num)));//公式法,时间复杂度o(1),空间复杂度oo(1)
}
int main()
{
cout<<def(6)<<endl;
}
#include<cmath>
using namespace std;
第一种
//int def(int num)//{
// if(num==1||num==2)
// return 1;
// else
// return def(num-1)+def(num-2);
//}
第二种
int def(int num)//记忆搜索{
// int arr[1000];
// memset(arr,0,sizeof(arr));
// if(num==1||num==2)
// return 1;
// if(arr[num])
// return arr[num];
// return arr[num]=def(num-1)+def(num-2);
//}
第三种
//int def(int num)//{//滚动数组
// int arr[3];
// arr[1]=arr[2]=1;
// for(int i=3;i<=num;i++)
// {
// arr[i%3]=arr[(i-1)%3]+arr[(i-2)%3];
// }
// return arr[num%3];
//}
第四种
//int def(int num)//{
// int arr[1000];
// memset(arr,0,sizeof(arr));//以空间换时间,时间复杂度o(n)
// arr[1]=arr[2]=1;
// for(int i=3;i<=num;i++)
// arr[i]=arr[i-1]+arr[i-2];
// return arr[num];
//}
第五种
int def(int num){
return (int)(1.0/sqrt(5.0)*(pow((1+sqrt(5.0))/2,num)-pow((1-sqrt(5.0))/2,num)));//公式法,时间复杂度o(1),空间复杂度oo(1)
}
int main()
{
cout<<def(6)<<endl;
}