共计 2441 个字符,预计需要花费 7 分钟才能阅读完成。
咱们持续递归的一个问题,有闭包没有递归怎么能行
1.
第一个递归的案例就是用递归求阶乘,这应该是典中典了吧
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<script>
// 用递归来求阶乘 有限调用函数一级一级往下乘
function fn(n) {if (n == 1) {return 1}
return n * fn(n -1)
}
console.log(fn(3));
console.log(fn(5));
</script>
</body>
</html>
2.
有阶乘,那就必须要有斐波拉契亚数列,这两个呢其实就是拿来相熟递归的,别看简略,其实要了解透也要点逻辑能力的,还是挺不容易的
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<script>
// 利用递归求斐波那契数列 1、1、2、3、5、8、13、21。。。前面的值为前两项值得和
// 用户输出一个数字 n 就能够求出这个数字对应的斐波拉契数列的值 比方输出 4 就会失去 3 输出 6 就会失去 8
// 剖析 首先咱们失去那个条件是用户输出的数字 有点形象了 前面的概念 用户输出的数字就是咱们要找的第 n 项 而后再联合斐波拉契数列的法则 咱们要求第 n 项的值就能够由它的前两项的值相加所得 所以当用户输出第 n 项后 就能够通过 n -1 和 n- 2 失去它的前两项的和 再由以后的前两项的和 通过递归的求法
function getNum(n) {if (n == 1 || n == 2) {return 1}
return getNum(n - 1) + getNum(n - 2)
}
console.log(getNum(7));
</script>
</body>
</html>
3.
而后是一个输出 id 来拿数据的案例,这个案例其实还挺简单的
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<!-- 输出 id 号 返回对应的数据对象 -->
<script>
// 欠缺 总不能通过 console。log 来拿数据 所以是不不便的 这里能够新定义一个对象 来保留在外面
var good = {}
var data = [{
id : 1,
name : '家电',
goods : [{
id : 11,
gName : '电视机'
},
{
id : 12,
gName : '电冰箱'
}]
},{
id : 2,
name : '服装'
}]
function getID(Name, id) {Name.forEach(function(subject) {if (subject.id == id) {good = subject} else if(subject.goods && subject.goods.length != 0){getID(subject.goods, id)
}
})
return good
}
console.log(getID(data, 1));
// 如何实现数组里的元素里的元素查找 id
console.log(getID(data, 11));
</script>
</body>
</html>
4.
最初是一个深拷贝的案例,这个和后面一个是递归外面,我感觉比拟能阐明问题的两个案例,逻辑能力挺强的,不论是上一个还是这一个,缓缓的就开始变简单了看得出
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<script>
var obj = {
id: 1,
name: 'andy',
msg: {age: 18},
color: ['pink', 'red']
}
var o = {}
function getCopy(useCopy, usedCopy) {for (var k in usedCopy) {if (usedCopy[k] instanceof Array) {useCopy[k] = []
getCopy(useCopy[k], usedCopy[k])
} else if (usedCopy[k] instanceof Object) {useCopy[k] = {}
getCopy(useCopy[k], usedCopy[k])
} else {useCopy[k] = usedCopy[k]
}
}
return useCopy
}
getCopy(o, obj)
console.log(o);
o.msg.sex = '男'
console.log(o);
console.log(obj);
</script>
</body>
</html>
前端爱好者,望大佬给个内推机会!!!
正文完
发表至: javascript
2022-09-30