1204:爬楼梯 时间限制: 1000 ms 内存限制: 65536 KB 提交数: 18652 通过数: 9894 【题目描述】 树老师爬楼梯,他可以每次走1级或者2级,输入楼梯的级数,求不同的走法数。 例如:楼梯一共有3级,他可以每次都走一级,或者第一次走一级,第二次走两级,也可以第一次走两级,第二次走一级,一共3种方法。 【输入】 输入包含若干行,每行包含一个正整数N,代表楼梯级数,1≤N≤30。 【输出】 不同的走法数,每一行输入对应一行输出。 【输入样例】 5 8 10 【输出样例】 8 34 89
本题是要使用递归的,但是,要先知道递归的特征。
递归的特征是一个问题的求解需要一系列的计算,这一系列的计算存在着某种关联。
所以,我们要先找到关联。
关联如下:
/*1 台阶数 1 方法数 2 台阶数 11 2 方法数 3 111 12 21 4 1111 112 121 211 22 5 11111 1112 1121 1211 2111 221 212 122 */
可得1=1
2=2
3=3
4=5
5=8
就可以算出关联是:n=(n-1)+(n-2)
第3项方法数=第2项方法数+第1项方法数;
所以我们先定义
long long a[50],i,n;
a[50]是因为题目说楼梯数,虽然只说30,但保险起见,定大一点。
然后输入n,就是台阶数。再将台阶1和台阶2另外处理;
cin>>n; a[1]=1; a[2]=2;
之后就从台阶3开始算,并带入关联式:
for(i=3;i<=n;i++){ a[i]=a[i-1]+a[i-2]; }
最后再输出a [ n ]就好了,至于输入若干行就你们自己打吧,思路已经说了。