迭代和递归

179 阅读2分钟

递归

先说递归是什么? 它是一种循环的类型,他是一种特殊的循环。他的好处是为了把复杂的代码简便化,加强代码的可读性,简单来说就是把原理需要30行的代码现在写15行就可以了。学会了对编程的速度有提升的,最重要的是的面试会问啊,不然我都不一定学。
举个例子比如:给yuangongData下面添加一个tongguo:false可以通过arr.forEach()方法执行实现函数递归。
<template>
  <div class="login">
    <button @click="tianjia(yuangongData)">添加一个</button>
  </div>
</template>

<script>
export default {
  data() {
    return {
      yuangongData: [
        {
          Id: 0,
          yuangong_id: 0,
          name: '员工管理',
          vid: 2,
          status: 1,
          xingxiList: [
            {
              Id: 0,
              yuangong_id: 0,
              name: '员工管理',
              vid: 2,
              status: 1,
              xingxiList: [
                {
                  Id: 0,
                  yuangong_id: 0,
                  name: '员工管理',
                  vid: 2,
                  status: 1,
                  xingxiList: []
                }
              ]
            },
            {
              Id: 0,
              yuangong_id: 0,
              name: '员工管理',
              vid: 2,
              status: 1,
              xingxiList: [
                {
                  Id: 0,
                  yuangong_id: 0,
                  name: '员工管理',
                  vid: 2,
                  status: 1,
                  xingxiList: []
                }
              ]
            }
          ]
        },
        {
          Id: 0,
          yuangong_id: 0,
          name: '员工管理',
          vid: 2,
          status: 1
        },
        {
          Id: 0,
          yuangong_id: 0,
          name: '员工管理',
          vid: 2,
          status: 1,
          xingxiList: [
            {
              Id: 0,
              yuangong_id: 0,
              name: '员工管理',
              vid: 2,
              status: 1
            }
          ]
        }
      ]
    }
  },
  methods: {
    tianjia(list) {
      list.forEach((v, k) => {
        v.tongguo = false
        if (v.child) {
          this.tianjia(v.child)
        }
      })
      console.log(list)
    }
  }
}
</script>
<style lang="less" src="../assets/css/module/login.less">
* {
  padding: 0%;
}
</style>

注意:使用递归函数时需要注意函数终止条件,避免死循环
递归函数说白了就是在函数体内调用自己的一个函数(通俗的说:也就是自己调自己,自给自足);

迭代

迭代是重复反馈过程的一个活动,其目的通常是为了逼近所需目标或结果,其实对于上句话大家有学过for循环,知道for循环的执行流程,就不难理解这句话了。

为什么我们要使用迭代器呢?是因为在我们日常使用的for循环中可能会经历循环出错 比如yuangongData数组长度只有3,但是你的索引却跑到了4。逻辑稍微失误,就导致程序不能正常运行。

举个栗子:我们使用for循环遍历集合时,容易出错,但是我们使用类似forEach的话,就会减少空指针引用的问题

      let arr=[1,2,3,4,5,6]
arr.forEach(item => console.log(item)) //打印1,2,3,4,5,6.总共打印六次
                                       // 此时可以不用i来操作集合了。  
                                       
// 当然如果需要index的也可以 
arr.forEach((item,index) => console.log(item+'-'+index))//打印1-0,2-1,3-2,4-3,5-
4,6-5.总共打印六次
常用的几种迭代数组方法:
 arr.map(回调函数)
 arr.filter(回调函数)
 arr.forEach(回调函数)

递归和迭代的区别

他们的区别是递归与迭代都是循环的一种,简单比较如下:
    -   在代码的结构上,递归是重复调用函数本身实现循环,迭代是通过循环的结构实现的。
    -   在结束方式上,递归当满足终止条件时就会逐层返回再结束,而迭代是直接使用计数器一直到结束循环。
    -   在执行效率上,迭代的效率明显高于递归。这是因为递归需要占用大量系统资源,如果递归深度很大,系统资源可能会不够用。
    -   在编程实现上,递归可以很方便的把数学公式转换为程序,易理解,易编程。迭代虽然效率高,不需要系统开销,但不容易理解,编写复杂问题时比较麻烦。