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

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

知识点

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

知识点

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

相关推荐
hello_simon1 小时前
【Word转PDF】在线Doc/Docx转换为PDF格式 免费在线转换 功能强大好用
职场和发展·pdf·word·学习方法·word转pdf·石墨文档·word转换
anyup_前端梦工厂2 小时前
了解几个 HTML 标签属性,实现优化页面加载性能
前端·html
前端御书房2 小时前
前端PDF转图片技术调研实战指南:从踩坑到高可用方案的深度解析
前端·javascript
2301_789169542 小时前
angular中使用animation.css实现翻转展示卡片正反两面效果
前端·css·angular.js
武乐乐~3 小时前
欢乐力扣:赎金信
算法·leetcode·职场和发展
风口上的猪20153 小时前
thingboard告警信息格式美化
java·服务器·前端
程序员黄同学3 小时前
请谈谈 Vue 中的响应式原理,如何实现?
前端·javascript·vue.js
夏天的阳光吖3 小时前
C++蓝桥杯基础篇(四)
开发语言·c++·蓝桥杯
爱编程的小庄4 小时前
web网络安全:SQL 注入攻击
前端·sql·web安全
测试19984 小时前
接口测试工具:Postman
自动化测试·软件测试·python·测试工具·职场和发展·接口测试·postman