本文解析一道经典的 JavaScript 台阶算法面试题。通过从 1 格到 4 格的逐步推导,揭示走法数量符合斐波那契数列规律(s(n) = s(n-1) + s(n-2))。文章提供了基于循环迭代的 JS 代码实现,用于计算 100 级台阶的总走法,避免递归带来的性能问题,适合前端开发者参考学习。
台阶问题描述
假设有一段共 100 级的台阶,每次可以选择跨 1 级或 2 级,请问共有多少种不同的走法?
在一次电话面试中,我遇到了这道算法题,当时瞬间感到困惑,不知如何下手。
随后我尝试自行推导:如果每次都只走 1 级,最多需要 100 步;如果每次都跨 2 级,最少需要 50 步。这种思路显然偏离了核心解法,好在面试官及时打断,否则我可能会继续陷入死胡同。
面试结束后,我回到家中,使用 Mac 电脑仔细思考并重新梳理逻辑,最终写出了正确的代码。
var Stairs = new step();
function step(){
this.n1=1;
this.n2=2;
this.total=100;
this.getFunction = getFunction;
}
function getFunction(){
for(i=2;i<this.total;i++){
res = this.n1 + this.n2;
this.n1 = this.n2;
this.n2 = res;
}
return res;
}
var totalStairs = Stairs.getFunction();
alert(totalStairs)
小规模案例推导
当只有 1 级台阶时,只能走 1 步,因此只有 1 种走法。
当有 2 级台阶时,可以是“1+1”或者“2”,共有 2 种走法。
当有 3 级台阶时,组合方式包括“1+1+1”、“2+1”和“1+2”,共 3 种走法。
当有 4 级台阶时,可能的序列包括“1+1+1+1”、“2+2”、“2+1+1”、“1+1+2”和“1+2+1”,共计 5 种走法。
斐波那契规律与代码实现
观察上述规律可以发现,第 n 级台阶的走法数 s(n) 等于前两级走法数之和,即递推公式为:s(n) = s(n-1) + s(n-2)。
这正是斐波那契数列的特征。基于此规律,我们可以编写相应的代码来求解。
for(i=2;i<this.total;i++){
res = this.n1 + this.n2;
this.n1 = this.n2;
this.n2 = res;
}
本人对算法研究尚浅,以上分析如有不当之处,欢迎指正。
以上就是关于 JS 台阶算法面试题的全部内容,希望对大家有帮助,欢迎支持。