什么是递归
如果一个函数在内部可以调用其本身,那么这个函数就是递归函数
简单理解:函数内部自己调用自己, 这个函数就是递归函数
递归函数的作用和循环效果一样
由于递归很容易发生“栈溢出”错误(stack overflow),所以必须要加退出条件 return

 <script>// 递归函数 : 函数内部自己调用自己, 这个函数就是递归函数var num = 1;function fn() {console.log('我要打印6句话');if (num == 6) {return; // 递归里面必须加退出条件}num++;fn();}fn();</script>

利用递归求数学题

  1. 利用递归函数求1~n的阶乘-求 1 * 2 *3 … * n 阶乘
<script>// 利用递归函数求1~n的阶乘 1 * 2 * 3 * 4 * ..nfunction fn(n) {if (n == 1) {return 1;}return n * fn(n - 1);}console.log(fn(3));console.log(fn(4));// 详细思路 假如用户输入的是3//return  3 * fn(2)//return  3 * (2 * fn(1))//return  3 * (2 * 1)//return  3 * (2)//return  6</script>

2.利用递归函数求斐波那契数列(兔子序列)

 <script>// 利用递归函数求斐波那契数列(兔子序列)  1、1、2、3、5、8、13、21...// 用户输入一个数字 n 就可以求出 这个数字对应的兔子序列值// 我们只需要知道用户输入的n 的前面两项(n-1 n-2)就可以计算出n 对应的序列值function fb(n) {if (n === 1 || n === 2) {return 1;}return fb(n - 1) + fb(n - 2);}console.log(fb(3));console.log(fb(6));</script>

3.利用递归遍历数据-利用递归求:根据id返回对应的数据对象

 <script>var data = [{id: 1,name: '家电',goods: [{id: 11,gname: '冰箱',goods: [{id: 111,gname: '海尔'}, {id: 112,gname: '美的'}, ]}, {id: 12,gname: '洗衣机'}]}, {id: 2,name: '服饰'}];// 我们想要做输入id号,就可以返回的数据对象// 1. 利用 forEach 去遍历里面的每一个对象function getID(json, id) {var o = {};json.forEach(function(item) {// console.log(item); // 2个数组元素if (item.id == id) {// console.log(item);o = item;// 2. 我们想要得里层的数据 11 12 可以利用递归函数// 里面应该有goods这个数组并且数组的长度不为 0 } else if (item.goods && item.goods.length > 0) {o = getID(item.goods, id);}});return o;}console.log(getID(data, 1));console.log(getID(data, 2));console.log(getID(data, 11));console.log(getID(data, 12));console.log(getID(data, 111));</script>

浅拷贝和深拷贝

  1. 浅拷贝只是拷贝一层, 更深层次对象级别的只拷贝引用.
  2. 深拷贝拷贝多层, 每一级别的数据都会拷贝.
  3. Object.assign(target, …sources) es6 新增方法可以浅拷贝
    targe:要拷贝给谁
    …sources:要拷贝的对象

浅拷贝

 <script>// 浅拷贝只是拷贝一层, 更深层次对象级别的只拷贝引用.// 深拷贝拷贝多层, 每一级别的数据都会拷贝.var obj = {id: 1,name: 'andy',msg: {age: 18}};var o = {};// for (var k in obj) {//     // k 是属性名   obj[k] 属性值//     o[k] = obj[k];// }// console.log(o);// o.msg.age = 20;// console.log(obj);console.log('--------------');Object.assign(o, obj);console.log(o);o.msg.age = 20;console.log(obj);</script>

深拷贝

<script>// 深拷贝拷贝多层, 每一级别的数据都会拷贝.var obj = {id: 1,name: 'andy',msg: {age: 18},color: ['pink', 'red']};var o = {};// 封装函数 function deepCopy(newobj, oldobj) {for (var k in oldobj) {// 判断我们的属性值属于那种数据类型// 1. 获取属性值  oldobj[k]var item = oldobj[k];// 2. 判断这个值是否是数组if (item instanceof Array) {newobj[k] = [];deepCopy(newobj[k], item)} else if (item instanceof Object) {// 3. 判断这个值是否是对象newobj[k] = {};deepCopy(newobj[k], item)} else {// 4. 属于简单数据类型newobj[k] = item;}}}deepCopy(o, obj);console.log(o);var arr = [];console.log(arr instanceof Object);o.msg.age = 20;console.log(obj);</script>

JS-递归函数:什么是递归相关推荐

  1. js递归函数使用介绍

    所谓的递归函数就是在函数体内调用本函数. 使用递归函数一定要注意,处理不当就会进入死循环.递归函数只有在特定的情况下使用 ,比如阶乘问题 一个10以内的阶乘,js递归函数实例代码: <!DOCT ...

  2. js 递归函数(函数自己调用自己)

    js递归函数,一定加上return <script type="text/javascript">         function setNum(i){        ...

  3. js递归函数递归思想

    定义: 1.递归函数就是在函数体内调用本函数: 2.递归函数的使用要注意函数终止条件避免死循环,使用递 归的时候必须有一个结束标志,否则会报内存溢出的错误 Maximum call stack siz ...

  4. JS函数表达式——函数递归、闭包

    一:定义函数的方式: 1.函数声明:2.函数表达式 函数声明的重要特征:函数声明提升,在执行代码之前会先读取函数声明. sayHi(); function sayHi(){console.log(&q ...

  5. python递归函数例题_递归案例python

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 而对应的中文翻译 "递归" 却表达了两个意思:"递 ...

  6. 栈的应用4——递归函数的非递归形式(主讲阿克曼函数的非递归形式)

    递归 函数自己调用自己 如求阶乘函数: int jiecheng(int n) {if(n==0)return 1;if(n==1)return 1;else return n*jiecheng(n- ...

  7. js递归函数及深浅拷贝

    <!DOCTYPE html> <html><head><meta charset="utf-8"><title>递归函 ...

  8. js 异步循环使用递归

    var loopAsync = function(taskArr, itemFn) {let len = taskArr.length;return new Promise((resolve, rej ...

  9. 将递归函数转换为非递归形式

    转自 :https://blog.csdn.net/sunny_ss12/article/details/47095381 1. 递归的调用原理:分而治之 为求一个大规模问题的问题,可以: (1)将原 ...

  10. python递归创建目录_Node.js和Python使用递归查看目录文件和创建目录

    1. 查看目录文件: 1.1 Node实现: let fs = require('fs'); let path = require('path'); let filePath = path.resol ...

最新文章

  1. 机械自动化专业转 PLC 还是单片机,路会更好走一些?
  2. 【OpenCV学习】Bresenham算法opencv实现
  3. qmail+rt+dns+apache
  4. 使用js简单实现javaMap
  5. Golang实现简单爬虫框架(5)——项目重构与数据存储
  6. (224)FPGA数字信号处理入门指导
  7. Android如何通过shareduserid获取系统权限
  8. 七牛云存储,图片储存
  9. 成品app直播源码,设置ViewPager不可滑动
  10. MCSA / Windows Server 2016 PowerShell DSC
  11. 机器学习之---马尔可夫随机场的应用
  12. window10计算机策略,Win10秘笈:重置组策略/安全策略命令大全
  13. 银河麒麟V10(Kylin Linux V10)安装 Kibana-7.15.2
  14. 世界互联网大会上有哪些黑客科技值得关注?
  15. Kubernetes 学习笔记
  16. 解决打开xml文件没有代码
  17. 第二届安洵杯2019部分writeup
  18. 会声会影最新版:会声会影2021中文版它来啦!
  19. 网站关键词优化如何优化大量关键词?
  20. 基于Pytorch框架的轻量级卷积神经网络垃圾分类识别系统

热门文章

  1. android 8.1 新增自定义系统服务
  2. 记人生第二次参加Codeforces比赛
  3. 从零开始:如何成为一名优秀的品牌策划师
  4. 拾壹博客拆解,docker环境部署加自动化发布(一)
  5. maven项目如何打包
  6. 【面试题】n个骰子的点数(动态规划法)
  7. 数据中心未来的发展趋势
  8. 观看慕课moocer老师视频AOP基本概念及特点
  9. 抖音如何免费上热门精选 视频md5修改器ios
  10. groupby的用法及原理详解