走台阶问题
来源:互联网 发布:大数据最重要的职位 编辑:程序博客网 时间:2024/05/17 07:47
问题
老师给我们出了一道题,说的是腾讯的一道面试题:一个楼梯有N个台阶,每一步可以走一个台阶,也可以走两个台阶,也可以走三个台阶。请问走完这个楼梯共有多少种方法?我以前也碰到过整数划分问题,跟这个问题有点相像,不过整数划分问题更难点。写出来和大家分享一下。
举个例子,假设有3个台阶,则有四种走法:分别是,1-1-1, 1-2, 2-1,3。
分析
很简单的一道题,学过组合数学的人很快就能想到,这是一个递推关系。假设走完k个台阶有f(k)种走法。
- k = 1时,f(k) = 1
- k = 2时,f(k) = 2
- k = n时,第一步走一个台阶,剩n-1个台阶,有f(n - 1)种走法。第一步走两个台阶,剩n-2个台阶,有f(n - 2)种走法,第一步走三个台阶,剩n-3个台阶,有f(n - 3)种走法。所以共有f(n - 1) + f(n - 2) + f(n-3)种走法。
于是有如下公式:
代码
递归算法:
#include<iostream>using namespace std;int AllStep(int N,int m){if(N < 1)return 0;if(N == 1)return 1;if(N == 2)return 2;if(N == m)return 4;return AllStep(N-1,m) + AllStep(N-2,m) + AllStep(N-3,m);}int main(){int nSteps;int step = 3;//最大一步走三阶cout<<"please input the total steps:";cin>>nSteps;cout<<"All step ways are:"<<AllStep(nSteps,step)<<endl;return 0;}
0 0
- 走台阶问题算法
- 走台阶问题(转)
- 走台阶问题
- 走台阶问题
- 走台阶问题
- 走台阶问题
- 走台阶问题
- 走台阶问题
- 走台阶问题
- 走台阶问题
- 动态规划--走台阶问题
- 走台阶问题,整数的分解问题
- 走台阶
- 程序员面试——走台阶问题
- 程序员面试——走台阶问题
- 走台阶的问题的心得
- 程序员面试——走台阶问题
- 【重走普及路】【递归】台阶问题
- HBase的伪分布模式安装
- SEO学习笔记(五)
- cocos2d-x渲染流程分析
- linq嵌套、联合查询
- SEO建议
- 走台阶问题
- IR2103使用实例
- 进程调度算法
- 树基础 心得
- 在Linux系统下, 可以用一个命令很容易批量删除.svn的文件夹
- javaScript部分,dom应用
- POJ 2528 Mayor's posters(线段树+离散化)
- HelloWorld
- C语言位运算详解