注释很详细,直接上代码
涉及知识点:
- 循环判断斐波那契数列组
- 递归判断斐波那契数列组
- 合法性判断
题干:
我的答案
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
</head>
<body>
<script type="text/javascript">
/**
* 对于这题我们采用了两种方法,
* 一种是使用循环,另一种是使用递归
* 循环的比较好理解,这里我们只讲讲递归的思路
* 因为递归到末尾需要用到前两项的值,这里我们就将它写进递归,不单独判断这个条件了
* 我们这个递归是用于判断是否是斐波那契数列,
* 递归终止条件是下标为1,因为前两项的判断方法和后面的项不一样
* 对于index=1自然就是返回前两项是否为0、1,
* 其他情况需要注意,它取决于两个条件,一个是上一个函数的返回值,另一个是当前项是否符合斐波那契数列
* 并且是只要有false则为false,所以这里我们需要使用&&
*/
const _isFibonacci = (array) => {
// 补全代码
try {
if (array.length < 3) {
throw new Error("数组长度不能小于3");
}
if (array[0] != 0 || array[1] != 1) {
throw new Error("数组前两个元素不是0和1");
}
for (let i = 2; i < array.length; i++) {
if (array[i] != array[i - 1] + array[i - 2]) return false;
}
return true;
} catch (e) {
console.log(e);
return false;
}
};
let array = [0, 1, 1];
console.log(_isFibonacci(array));
//使用递归实现斐波那契数列的判断
const _isFibonacci1 = (array) => {
try {
if (array.length < 3) {
throw new Error("数组长度不能小于3");
}
return recursivelyJudgeFibonacciSequence(array, array.length - 1);
} catch (err) {
console.log(err);
return false;
}
};
const recursivelyJudgeFibonacciSequence = (array, index) => {
if (index == 1) return array[0] == 0 && array[1] == 1;
else
recursivelyJudgeFibonacciSequence(array, index - 1) &&
array[index] == array[index - 1] + array[index - 2];
};
console.log(_isFibonacci1([0, 1, 1]));
</script>
</body>
</html>
博客更新不是很及时,需要看后面内容的可以看看我的
gitee仓库
牛客JS题Gitee仓库