一个人上台阶可以一次上1个,2个,或者3个,问这个人上n层的台阶,总共有几种走法?
F(1)=1;
F(2)=2;
F(3)=4;
F(n)=F(n-1)+F(n-2)+F(n-3);
void TaiJie(int n,vector<int> &vresult, int &nresult)
{
if(n<0)
return;
else if(n==0)
{
nresult++;
for (int i=0;i<vresult.size();i++)
{
cout<<vresult[i]<<" ";
}
cout<<endl;
}
else
{
if(n>=3)
{
vresult.push_back(3);
TaiJie(n-3,vresult,nresult);
vresult.pop_back();
vresult.push_back(2);
TaiJie(n-2,vresult,nresult);
vresult.pop_back();
vresult.push_back(1);
TaiJie(n-1,vresult,nresult);
vresult.pop_back();
}
else if(n==2)
{
vresult.push_back(2);
TaiJie(n-2,vresult,nresult);
vresult.pop_back();
vresult.push_back(1);
TaiJie(n-1,vresult,nresult);
vresult.pop_back();
}
else
{
vresult.push_back(1);
TaiJie(n-1,vresult,nresult);
vresult.pop_back();
}
}
}
int TaiJie(int n)
{
vector<int> vresult;
int nresult=0;
TaiJie(n, vresult,nresult);
return nresult;
}