废话不多说直接上题
问题:小白正在上楼梯,楼梯有n阶台阶,小白一次一次可以上1阶,2阶或3阶,实现一个方法,计算小白有多少种走完楼梯的方式。
1)第一种方式:寻找重复
因为一次可以上1阶,2阶或3阶,要计算到达n阶的方式,为到达n-1,n-2,n-3阶的方式之和,也就是
f(n)=f(n-1)+f(n-2)+f(n-3)
代码:function f(x){
if(x==0) return 1
if(x==1) return 1
if(x==2) return 2
return f(x-1)+f(x-2)+f(x-3)
}
2)第二种方法:dfs暴力
如果起点是0,终点是N那么每走一步都有三种可能,如果走到第N层时跳出循环
代码如下:var N=9
var count=0
function f(x){
if(x==N) count++
else if(x>N) return
else {
f(x+1)
f(x+2)
f(x+3)
}
}
f(0)
alert(count)
下面开始正文:
这是蓝桥杯的一道题题目标题: 第39级台阶
小明刚刚看完电影《第39级台阶》,离开电影院的时候,他数了数礼堂前的台阶数,恰好是39级!
站在台阶前,他突然又想着一个问题:
如果我每一步只能迈上1个或2个台阶。先迈左脚,然后左右交替,最后一步是迈右脚,也就是说一共要走偶数步。那么,上完39级台阶,有多少种不同的上法呢?
请你利用计算机的优势,帮助小明寻找答案。
要求提交的是一个整数。
注意:不要提交解答过程,或其它的辅助说明文字。
好,既然都懂那我就不说了,直接上代码:var count=0;
function f(x,t){
if(x==39&&t%2==0) count++
else if(x>39) return
else {
f(x+1,t+1)
f(x+2,t+1)
}
}
f(0,0)
alert(count)
优化版本:fun.prototype.funinit=function(y1, y2){
if (y1 == this.x && y2 % 2 == 0) this.count++
else if (y1 > this.x) return
else {
this.funinit(y1 + 1, y2 + 1)
this.funinit(y1 + 2, y2 + 1)
}
}
function fun(x) {
this.count = 0
this.x = x
this.funinit(0,0)
console.log(this.count)
}
new fun(39);
写完手工
----------------------------------------------啥都不会的Zzh