20阶楼梯有多少种走法
20阶楼梯,每次一阶或两阶,有多少种走法,类似裴波拉切数列;
- 可以用递归实现;
function fs(n) { if (n == 1) return 1; if (n == 2) return 2; return fs(n - 1) + fs(n - 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; }
- 组合法
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; }
参考资料: