注释很详细,直接上代码
涉及知识点:
- 循环判断斐波那契数列组
- 递归判断斐波那契数列组
- 合法性判断
题干:
我的答案
<!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;elserecursivelyJudgeFibonacciSequence(array, index - 1) &&array[index] == array[index - 1] + array[index - 2];};console.log(_isFibonacci1([0, 1, 1]));</script></body>
</html>
博客更新不是很及时,需要看后面内容的可以看看我的
gitee仓库
牛客JS题Gitee仓库