蓝桥杯练习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;

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

知识点

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

知识点

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

相关推荐
guslegend1 小时前
脚手架原理与本地调试:从 bin 软链接到 npm link
前端·npm·node.js·脚手架·前端工程化
小宋10211 小时前
A2UI从零实战:Agent安全生成交互界面与事件回传
javascript·人工智能·安全·交互
大包子2 小时前
structuredClone vs lodash.cloneDeep:核心差异与选型指南
javascript·vue.js
海码事务所2 小时前
Google Play 新个人开发者账号上架指南:12 人连续 14 天封闭测试怎么做?
前端
田威AI2 小时前
图片内文字翻译的规格:输入输出、保真、自动化、时间与费用
前端·计算机视觉
不可能片场2 小时前
命令行中文变问号 我用环境变量救了场
前端·electron
lerhxx2 小时前
AI 应用中的上下文管理 —— 从"上下文窗口"到"分层压缩"的工程实践
前端·javascript
骑着蜗牛撵大象3272 小时前
多 Agent 分治协作:MapReduce 模式下的并行扇出与结果归并
前端
用户55318297322 小时前
Flutter iOS 热更新深入 Dart VM:读懂函数入口、解释执行与调用桥接
前端
前端snow2 小时前
为什么大厂要用Postgres + mogodb的框架?
前端