楼梯台阶问题解法

来源:互联网 发布:淘宝网店如何上传宝贝 编辑:程序博客网 时间:2024/05/01 14:52

非常简单的递归,居然连我都能做出来

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 10int 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;}