递归算法和经典递归例子(复习+学习 递归)
导读:我们继续递归的一个问题,有闭包没有递归怎么能行...
我们继续递归的一个问题,有闭包没有递归怎么能行
1.
第一个递归的案例就是用递归求阶乘,这应该是典中典了吧
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>
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。
创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!