一直想用递归去搞,总是GG。。。
#include<iostream>
#include<vector>
#include<string>
using namespace std;
long GetPells(long n)
{
if(n==1)
{
return 1;
}
else if(n==2)
{
return 2;
}
else
{
return 2*GetPells(n-1)+GetPells(n-2);
}
}
int main()
{
int linenum=0;
vector<long> vec1;
cin>>linenum;
while((linenum--)>0)
{
long temp=0;
cin>>temp;
vec1.push_back(temp);
}
for(int i=0;i<vec1.size();i++)
{
cout<<GetPells(vec1[i])%32767<<endl;
}
return 0;
}
用循环大法吧。。。
#include<iostream>
#include<vector>
#include<string>
using namespace std;
#define K 32767
int main()
{
int linenum=0;
vector<long> vec1;
vector<long> vec2;
cin>>linenum;
while((linenum--)>0)
{
long temp=0;
cin>>temp;
vec1.push_back(temp);
}
//干,原来本质上是先存到一个数组中去
vec2.push_back(1);
vec2.push_back(2);
for(int j=2;j<1000001;j++)
{
vec2.push_back((2*(vec2[j-1]%K)+vec2[j-2]%K)%K);
}
for(int i=0;i<vec1.size();i++)
{
cout<<vec2[vec1[i]-1]<<endl;
}
return 0;
}