首页 > 其他分享 >复习+学习 递归

复习+学习 递归

时间:2022-09-30 11:31:06浏览次数:39  
标签:console log 递归 useCopy 学习 usedCopy 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>
<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>

有阶乘,那就必须要有斐波拉契亚数列,这两个呢其实就是拿来熟悉递归的,别看简单,其实要理解透也要点逻辑能力的,还是挺不容易的

<!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>

然后是一个输入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>

最后是一个深拷贝的案例,这个和前面一个是递归里面,我觉得比较能说明问题的两个案例,逻辑能力挺强的,不管是上一个还是这一个,慢慢的就开始变复杂了看得出

<!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>

标签:console,log,递归,useCopy,学习,usedCopy,id,复习
From: https://blog.51cto.com/u_5375128/5725710

相关文章

  • 机器学习基础知识
    一、机器学习的分类1、有监督学习通过大量已知的输入和输出相配对的数据,让计算机从中学习出规律,从而能针对一个新的输入做出合理的输出预测。回归学习:预测模型的输出是......
  • 【尚硅谷】Vue2.x组件化编码学习笔记--渐进式的JS框架
    Vue组件化编码​​一、使用Vue-cli创建项目​​​​1.1说明​​​​1.2创建Vue项目​​​​1.2.1如何修改端口以及自动运行​​​​1.3Vue-cli创建的项目的目录结构​​......
  • Vue面试题27:为什么要使用路由懒加载?(总结自B站up主‘前端杨村长’视频,仅供自用学习)
    这是一道应用题。当打包应用时,JavaScript包会变得非常大,影响页面加载。如果我们能把不同路由对应的组件分割成不同的代码块,然后当路由被访问时才加载对应组件,这样就会更加......
  • 有人说,25岁再学习Java太晚了,我不这样认为!
    我个人认为任何时候,任何时期都不算晚!不过你要做好心理准备,毕竟自学java就业很难,你可以找一个行之有效的学习路线,跟着学习路线来学习,还是很有可能的,在学习的过程中,除了坚持......
  • 学习WSGI
     Web应用就是先把HTML用文件保存好,用一个现成的HTTP服务器软件,接收用户请求,从文件中读取HTML,再返回。Apache、Nginx、Lighttpd等这些常见的静态服务器就是干这件事情的。......
  • 学习过程中老师提到的面试题
    publicclassdemo3{publicstaticvoidmain(String[]args){//整数拓展:进制二进制0b十进制八进制0十六进制0xinti=10;......
  • Python学习笔记5(循环2)
    problem1编写一个程序把输入整数颠倒后存入另一个变量并输出。例如:输入\(1230\),输出\(321\)输入样例:12345输出样例:54321解题思路:就把元组里面元素反转就好了,循环......
  • 第十组 chap1-2学习总结——对c语言的第一印象
    博客内容概括:一,引言。二,学习内容梳理。三,课后习题中的问题及解决历程。四,小结。 一,引言 经过两周的线上小组学习,让对编程的第一印象只停留在黑客电影和科幻片的......
  • Java 参考学习路线
    1、Roadmaproadmap官网部分路线图可能有中文版,可Baidu。2、CodeSheep3、鱼皮Java学习路线视频导读......
  • 学习 MySQL 需要知道的 28 个小技巧
    如何快速掌握MySQL?培养兴趣兴趣是最好的老师,不论学习什么知识,兴趣都可以极大地提高学习效率。不管学习 MySQL5.7 还是 MySQL8.0 都不例外!夯实SQL基础计算机领......