首页 > 代码库 > 走楼梯算法

走楼梯算法

首先,我们来看下下面这栋楼梯:

技术分享

一共四层,我们规定“一个人爬楼梯,一步可以迈一级,二级台阶,如果楼梯有N级,要求编写程序,求总共有多少种走法”,接下来我们统计下这四层,每层的走法:

技术分享

从这个简短的统计中,我们可以发现一个规律(如果觉得还看不出,可以再多几阶楼梯),从第三阶梯开始,走法就是第一阶梯走法和第二阶梯走法之和,第四阶梯走法是第三阶梯和第二阶梯走法之和,所以,我们可以得到如下如下公式:

技术分享

 由此可知,此处应用递归算法。

而第一阶梯和第二阶梯这样无规律的数字,我们可以将他定量表示,由此,我们得出如下实现方式来求出N阶阶梯的走法:

function getNum($n) {
    switch($n) {
        case 1:
            return 1;
        case 2:
            return 2;
        default:
            return getNum($n-1) + getNum($n-2);
    }
}

 

假如爬楼梯时一步还可以迈三步,这时候其实就是,N级楼梯问题可以划分为:N-1级楼梯,N-2级楼梯,N-3级楼梯的走法之和。以此类推,不过一般也就时最大三步了。

 

走楼梯算法