蓝桥杯练习07小兔子爬楼梯

小兔子爬楼梯

介绍

小兔子想去月球上旅行,假设小兔子拥有一个阶梯子,当你爬完层就可以到达月球,小兔子每次可以跳1或者2个台阶,小兔子有多少种跳法可以到达月球呢?

给定n是一个正整数,代表梯子的阶数,当n=2时,小兔子有2种跳法到达月球;当=3时,小兔子有3种跳法跳到月球,以此类推,解释如下图所示:

提示

这里为同学提供一种解题思路。

递归

可以使用递归来实现,具体思路如下:

. 当阶梯数为0时,只有0种方法;当阶梯数为1时,只有1种方法;当阶梯数为2时,只有2种方法,所以当阶梯数小于等于2时,可以直接返回值。

·如果阶梯数大于2,就递归。

解题思路不只这一种,同学们可以自由发挥。

准备

开始答题前,需要先打开本题的项目代码文件夹,目录结构如下:

其中:

·js/index.js是实现函数的is代码文件。

·index.html是显示结果的页面。

在浏览器中预览index.html页面效果如下:

目标

请完善js/index.js文件中的代码,让页面呈现如下所示的效果:

代码

html

html 复制代码
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>

  <body>
    <div>
      <p id="result1"></p>
      <p id="result2"></p>
      <p id="result3"></p>
    </div>
    <script src="./js/index.js"></script>
    <script>
      let r1 = document.getElementById("result1");
      let r2 = document.getElementById("result2");
      let r3 = document.getElementById("result3");
      r1.innerHTML = `2 阶梯子,兔子有 ${climbStairs(2)} 种跳法到达月球。`;
      r2.innerHTML = `3 阶梯子,兔子有 ${climbStairs(3)} 种跳法到达月球。`;
      r3.innerHTML = `4 阶梯子,兔子有 ${climbStairs(4)} 种跳法到达月球。`;
    </script>
  </body>
</html>

js

js 复制代码
const climbStairs = (n) => {
    // TODO:请补充代码
     /**
     * 思路:分析可得第n阶梯子的跳法等于第n-1和第n-2阶梯子的跳法之和
     */
};
module.exports = climbStairs;

答案

js 复制代码
const climbStairs = (n) => {
    // TODO:请补充代码
    /**
     * 思路:分析可得第n阶梯子的跳法等于第n-1和第n-2阶梯子的跳法之和
     */
    //法一:递归思想
    if (n <= 2) {
        return n
    } else {
        return climbStairs(n - 1) + climbStairs(n - 2)
    }


    //法二:第1阶梯子有一种跳法 第2阶梯子有2种跳法,用a,b往后移代表第n-1和第n-2阶梯子的跳法
    // if (n <= 2) {
    //     return n
    // }
    // let a = 1
    // let b = 2
    // let c
    // while (n > 2) {
    //     c = a + b
    //后移a,b
    //     a = b
    //     b = c
    //     n--
    // }
    // return c


    //法三:利用解构赋值,整体思想与法二一样
    // if (n <= 2) {
    //     return n
    // }
    // let a = 1
    // let b = 2
    // while (n > 2) {
    //     // 解构赋值
    //     [b, a] = [a + b, b]
    //     n--
    // }
    // return b

};
module.exports = climbStairs;

容易看出这几个数和斐波拉契数列相关用递归是最简单,后面的两种方法也是一个意思。

知识点

容易看出这几个数和斐波拉契数列相关用递归是最简单,后面的两种方法也是一个意思。

知识点

题还是比较简单也是常见的数列,考的是递归的运用。

相关推荐
庞轩px18 分钟前
模拟面试回答第十三问:JVM内存模型
jvm·面试·职场和发展
卷帘依旧21 分钟前
JavaScript 闭包经典问题:为什么输出 10 次 i=10
javascript
柳杉39 分钟前
Three.js × Blender:从建模到 Web 3D 的完整工作流深度解析
前端·javascript·数据可视化
reembarkation2 小时前
vue3中使用howler播放音频列表
前端·vue.js·音视频
手握风云-2 小时前
基于 Java 的网页聊天室(三)
服务器·前端·数据库
weixin199701080162 小时前
《识货商品详情页前端性能优化实战》
前端·性能优化
Forever7_2 小时前
重磅!Vue3 手势工具正式发布!免费使用!
前端·前端框架·前端工程化
用户806138166592 小时前
发布为一个 npm 包
前端·javascript
树上有只程序猿2 小时前
低代码何时能出个“秦始皇”一统天下?我是真学不动啦!
前端·后端·低代码
TT_哲哲2 小时前
小程序双模式(文件 / 照片)上传组件封装与解析
前端·javascript