假设一个楼梯有 N 阶台阶,人每次最多可以跨 M 阶。例如楼梯总共有3个台阶,人每次最多跨2个台阶,也就是说人每次可以走1个,也可以走2个,但最多不会超过2个,那么楼梯总共有这么几种走法:

我们这样看

1台阶楼梯走法为1,

2台阶楼梯走法为2,

3台阶楼梯走法为3,

4台阶楼梯走法为5,

5台阶楼梯走法为8,

我们可以得出规律,这其实是一个斐波那契数列,就很容易解决了

印象中有次面试被问到这个问题,所以在这里分享下

算法如下

<?php

/*
 * 2015/3/4 update
 * 1 2 3 5 8 13
 */
function fibonacci($n) 
{
    if ($n == 1) {
        return 1;
    }

    if ($n == 2) {
        return 2;
    }
    return fibonacci($n - 1) + fibonacci($n - 2);
}

for ($index = 1; $index < 10; $index++) {
    echo fibonacci($index)."\n";
}

beck徐工
59 声望7 粉丝

卖艺的小青年(php,golang)