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

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

知识点

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

知识点

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

相关推荐
魔术师Grace几秒前
真正值钱的 AI 小工具,可能只是帮人少打一遍字
前端·人工智能
用户新3 小时前
JS事件深度解析四 事件的循环和异步
前端·javascript·事件·event loop
广州灵眸科技有限公司9 小时前
瑞芯微RV1126B开发板(EASY-EAI-PI2) Easy-Eai编译环境准备与更新
服务器·前端·人工智能·python·深度学习
万少10 小时前
我把 Kimi 接进微信,几分钟做了个随手出图助手
前端
xiaofeichaichai10 小时前
网络请求与实时通道
前端·网络
kTR2hD1qb10 小时前
从 Responses API 到 Chat Completions:一个模型网关的设计复盘
linux·前端
kyriewen12 小时前
浏览器缓存最强攻略:强缓存、协商缓存、CDN、更新策略,一篇搞定
前端·面试·浏览器
持敬chijing12 小时前
Web渗透之SQL注入-联合查询注入-注入点数据类型判断
前端·sql·安全·web安全·网络安全·安全威胁分析
卷帘依旧13 小时前
Web3前端一面
前端