非常简单的递归,居然连我都能做出来
10个阶梯,你一次可以上一阶或两阶,走上去,共有多少种走法?
设n个阶梯共有f(n)种走法
f(n)=f(n-1)+f(n-2)
证明:第一步走1步,则剩下n-1个台阶,共f(n-1)种走法
第一步走2步,则剩下n-2个台阶,共f(n-2)种走法
推广问题:n个阶梯,可以走1步,2步,3步...m步,共有多少种走法?
#define n 10
int x=0;
int a[n]={0};
int p=0;
void foo(int i)
{
if(i>n)
return;
if(i==n)
{
x++;
for(int j=0;j<p;j++)
cout<<a[j];
cout<<"#"<<endl;
return;
}
if(i+1<=n)
{
a[p]=1;
p++;
foo(i+1);
p--;
}
if(i+2<=n)
{
a[p]=2;
p++;
foo(i+2);
p--;
}
}
void main()
{
foo(0);
cout<<x<<endl;
}