走台阶问题

来源:互联网 发布:大数据最重要的职位 编辑:程序博客网 时间: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