上台阶问题简单版
问题描述
现在小瓜想通过台阶走上平台,最底层(小瓜所在的层)编号为1,最顶层编号为n。由于小瓜的腿比较短,他一次只能向上走1级或者2级台阶。小瓜想知道他有多少种方法走上平台,你能帮帮他吗?
输入
一个整数n,其中2≤n≤25。
输出
一行一个整数,表示小瓜上台阶的方案数
数据范围
对于12%的数据,2≤n≤5;
对于28%的数据,2≤n≤10;
对于100%的数据,2≤n≤25;
输入样例
4
输出样例
3
解题思路
对于该问题,适合用递归的方法来计算。从倒数第一步开始、从未到头思考,倒数第一步可能走了一级台阶,也可能走了两级。对于倒数第一步走一级的情况,可分类成倒数第二步走了一级与两级的情况;对于倒数第一步走了两级的情况,也可分类成倒数第二步走了一级与两级的情况……以此类推,见下图
可以得到:
成功走完的方法数=最后一步走一级的方法数+最后一步走两级的方法数
即,假设总台阶数是10时,走到第10个台阶的方法数=走到第9个台阶的方法数+走到第8个台阶的方法数
又,走到第9个的方法数=走到第8个的方法数+走到第7个的方法数,走到第8个的方法数=走到第7个的方法数+走到第6个的方法数,……
所以有递推公式,f(n)=f(n-1)+f(n-2),f(n)表示走到第n个台阶方法数。
参考代码
#include <iostream>
using namespace std;
int goup(int number){
if(number == 1) return 1;
else if(number == 2) return 1;
else return goup(number - 1) + goup(number -2);
}
int main(){
int n;
cin >> n;
cout << goup(n) << endl;
return 0;
}