小兔子爬楼梯
介绍
小兔子想去月球上旅行,假设小兔子拥有一个阶梯子,当你爬完层就可以到达月球,小兔子每次可以跳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
<!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
const climbStairs = (n) => {
// TODO:请补充代码
/**
* 思路:分析可得第n阶梯子的跳法等于第n-1和第n-2阶梯子的跳法之和
*/
};
module.exports = climbStairs;
答案
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;
容易看出这几个数和斐波拉契数列相关用递归是最简单,后面的两种方法也是一个意思。
知识点
容易看出这几个数和斐波拉契数列相关用递归是最简单,后面的两种方法也是一个意思。
知识点
题还是比较简单也是常见的数列,考的是递归的运用。