20阶楼梯有多少种走法

20阶楼梯,每次一阶或两阶,有多少种走法,类似裴波拉切数列;

  1. 可以用递归实现;
    function fs(n) {
        if (n == 1) return 1;
        if (n == 2) return 2;
        return fs(n - 1) + fs(n - 2);
    }
  2. 使用迭代,把不同阶楼梯的走法打印出来;
    function fs(n) {
        var a = 1,
        b = 2;
        var temp;
        var str = '';
        if (n == 1) {
            str = '1,';
        } else if (n == 2) {
            str = '1,2,';
        } else {
            str = '1,2,';
            for (var i = 3; i <= n; i++) {
                temp = b;
                b = a + b;
                a = temp;
                str += b + ',';
            }
        }
        console.log(str.substring(0, str.length - 1));
        return b;
    }
  3. 组合法

    20阶楼梯,有零次走两阶,一种走法;有一次走两阶,C(19,1)种走法;有两次走两阶,C(18,2)种走法;…有十次走两阶,C(10,10)种走法;共1+C(19,1)+C(18,2)+C(17,3)+C(16,4)+C(15,5)+C(14,6)+C(13,7)+C(12,8)+C(11,9)+C(10,10)=10946;
    21阶楼梯,有零次走两阶,一种走法;有一次走两阶,C(20,1)种走法;有两次走两阶,C(19,2)种走法;…有十次走两阶,C(11,10)种走法;共1+C(20,1)+C(19,2)+C(18,3)+C(17,4)+C(16,5)+C(15,6)+C(14,7)+C(13,8)+C(12,9)+C(11,10)=17711;
    20阶楼梯,有零次走一阶,一种走法;有两次走一阶,C(11,2)种走法;有四次走一阶,C(12,4)种走法;…有二十次走一阶,C(20,20)种走法;共1+C(11,2)+C(12,4)+C(13,6)+C(14,8)+C(15,10)+C(16,12)+C(17,14)+C(18,16)+C(19,18)+C(20,20)=10946;

    function st(n) {
        var ns = 0,
        sum = 0;
        //一次两个阶梯的步数
        for (var i = 0; i <= Math.floor(n / 2); i++) {
            //对应总步数
            ns = 20 - i;
            //console.log(ns+','+i);
            sum += C(ns, i);
            //console.log(sum);
        }
        return sum;
    }
    
    //组合计算方法,供调用
    function C(sou, sel) {
        var A = 1,
        C = 1;
        if (sou < sel) return;
        for (var i = 1; i <= sel; i++) {
            A = sou * A;
            sou -= 1;
        }
        for (var k = 1; k <= sel; k++) {
            C = k * C;
        }
        return A / C;
    }

     


参考资料:

posted @ 2019-12-12 22:29  老余的水壶  阅读(1359)  评论(0)    收藏  举报