openjudge-4017 爬楼梯

总时间限制: 

1000ms

内存限制: 

65536kB

描述

树老师爬楼梯,他可以每次走1级或者2级,输入楼梯的级数,求不同的走法数
例如:楼梯一共有3级,他可以每次都走一级,或者第一次走一级,第二次走两级
也可以第一次走两级,第二次走一级,一共3种方法。

输入

输入包含若干行,每行包含一个正整数N,代表楼梯级数,1 <= N <= 30

输出

不同的走法数,每一行输入对应一行输出

样例输入

5
8
10

样例输出

8
34
89

对于问题的分类 :

我们每次可以走两种情况,即走一步和走两步,那走一步的时候,还剩下n-1阶没走,那就可以知道方案数就等于 n-1 阶的方案数。

然后是第一步走两步的情况,那还剩下n-2阶没走,那同理,方案数就为 n-2 阶的方案数。

所以当阶数为n的时候,我们就可以知道,方案数就是 f(n-1) +  f(n-2)。

递归的方程找到以后,我们就要找递归的边界条件了。易知,当阶数为一的时候,方案数为 1 。当阶数为 2 的时候方案数为 2。

然后递归就解决了。

#include <iostream>
using namespace std;
int N;
int stairs(int n)
{
	if (n==1)
		return 1;
	if (n==2)
		return 2;
	return stairs(n-1)+stairs(n-2);
}
int main()
{
	while (cin>>N) {
		cout<<stairs(N)<<endl;
	}
	return 0;	
}
原文地址:https://www.cnblogs.com/xyqxyq/p/12328911.html