上台阶问题
问题描述 :
有 N 个台阶,从台阶底端走到台阶顶端。每次有2种走法选择,上一个台阶或者上两个台阶。
问一共有多少种走法?
原题描述如下:
问题分析:
拿到问题我也蒙,我们来慢慢分析:
1、1 个台阶 =》 1 种走法
2、2 个台阶 =》 2 种走法
3、3个台阶 =》 3 种走法
4、4个台阶 =》 5 种走法
5、5个台阶 =》 8 种走法
6、6个台阶 =》 13 种走法
7、7个台阶 =》 21 种走法
8、8个台阶 =》 34 种走法
看着,找规律
1 1 2 3 5 8 13 21 34 ... ...
这个数列规律,小学生都应该见过。 我儿子上一年级时候我就见过他填写过这个数列。
规律: 当前项的值 = 前两项的和 。 著名的 斐波那契数列 。玩股票的人也经常见到。
要是一下次没能想到分析的方式,可以考虑从概率的角度出发,最后就是求 A m n,问题了,对于中小学生来说,有些难度。建议采用分析的方式来解决问题。毕竟分析问题是很重要的。
编程实现
算法实现起来就很简单了:
int j10001(int n){
if(n<2){
return n;
}
int b=1;
int c=1;
int next=0;
for(int i=2;i<=n;i++){
next = b+c;
b=c;
c=next;
}
return c;
}
运行结果
main 函数调度执行
#include <iostream>
using namespace std;
int j10001(int n);
int main() {
std::cout << "尘远同学编程-少年班欢迎您! 报名热线 : 025 - 8662 0610" <<std::endl;
int n,m;
/*cout<<"enter n : ";
cin>>n;*/
for(int n=0;n<30;n++){
m =j10001(n);
printf("当有%2d个台阶时,有%2d种走法\n",n,m);
}
return 0;
}
执行结果
扩展
1、规律题解法
2、动态规划的类似题解法
3、背包问题系列解法
相关练习
1、上台阶(每次1、2、3个台阶)