关于递归和迭代的学习和了解

简介: 递归和迭代这个两个词对于学计算机的uu们一定不陌生,在算法的学习中也经常会遇到递归算法和迭代算法,二者容易混淆,那区别又是什么呢?关于递归和迭代的理解,我也遇到过类似的面试题,接下来我们学习了解一下递归和迭代吧。

递归和迭代这个两个词对于学计算机的uu们一定不陌生,在算法的学习中也经常会遇到递归算法和迭代算法,二者容易混淆,那区别又是什么呢?关于递归和迭代的理解,我也遇到过类似的面试题,接下来我们学习了解一下递归和迭代吧。

🎯关于递归和迭代

⏬递归

    • 程序调用自身的编程技巧称为递归。递归作为一种算法在程序设计语言中广泛应用。 一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量。递归的能力在于用有限的语句来定义对象的无限集合。一般来说,递归需要有边界条件、递归前进段和递归返回段。当边界条件不满足时,递归前进;当边界条件满足时,递归返回。(来自百度百科——递归
    • 简单来说:递归就是一种函数调用自身的操作(就是在运行的过程中调用自己)。递归被用于处理包含有更小的子问题的一类问题。一个递归函数可以接受两个输入参数:一个最终状态(终止递归)或一个递归状态(继续递归)。

    🚩关于递归的一些例子

    首先我们要知道构成递归需具备的条件:

    1️⃣ 子问题须与原始问题为同样的事,且更为简单;

    2️⃣ 不能无限制地调用本身,须有个出口,化简为非递归状况处理。

      • 斐波那契数列指的是这样一个数列:1,1,2,3,5,8,13,21,34,55,89...
        这个数列从第3项开始,每一项都等于前两项之和。
      functionfibonacci(n){
      if(n==1||n==2) return1returnfibonacci(n-1) +fibonacci(n-2)
      }

      image.gif

      • 阶乘 任何大于等于1 的自然数n 阶乘表示方法: n! = 1 × 2 × 3 × ... × ( n-1 ) × n
      functionfactorial(n) {
      if (n==1) {
      returnn    }
      returnn*factorial(n-1)
      }
      letfac=factorial(5)
      console.log(fac)

      image.gif

      • 梵塔问题(汉诺塔问题)
        已知有三根针分别用A, B, C表示,在A中从上到下依次放n个从小到大的盘子,现要求把所有的盘子从A针全部移到B针,移动规则是:可以使用C临时存放盘子,每次只能移动一块盘子,而且每根针上不能出现大盘压小盘,找出移动次数最小的方案。

      • 德罗斯特效应是递归的一种视觉形式


      ⏬迭代

        • 迭代是重复反馈过程的活动,其目的通常是为了逼近所需目标或结果。每一次对过程的重复称为一次“迭代”,而每一次迭代得到的结果会作为下一次迭代的初始值。
        • 重复执行一系列运算步骤,从前面的量依次求出后面的量的过程。此过程的每一次结果,都是由对前一次所得结果施行相同的运算步骤得到的。例如利用迭代法*求某一数学问题的解。
        • 对计算机特定程序中需要反复执行的子程序*(一组指令),进行一次重复,即重复执行程序中的循环,直到满足某条件为止,亦称为迭代。(来自百度百科——迭代

        🚩关于迭代的一些例子

          • 斐波那契数列
          functionfibonacci(n){
          varres1=1;
          varres2=1;
          varsum=res2;
          for(leti=2;i<n;i++){
          sum=res1+res2;
          res1=res2;
          res2=sum;
              }
          returnsum;
          }


          • 阶乘 
          functionfactorial(number){
          lettotal=1for (letn=number;n>1;n--){
          total=total*n    }
          returntotal}
          console.log(factorial(5))

          image.gif

          • 等等

          🎯关于递归和迭代的区别

          简单来说

            • 递归代码简洁,处理复杂问题时易于理解,但效率低。在递归调用的过程当中系统为每一层的返回点、局部量等开辟了栈来存储。递归次数过多容易造成栈溢出等。
            • 迭代的效率高(因为运行循环总比反复调用函数的开销少很多),但是处理复杂问题时,代码结构复杂且不易于理解。不同于递归,可以避免出现栈溢出问题。

            image.gif

            相关文章
            |
            存储 缓存 Java
            嵌入式系统中C++内存管理基本方法
            嵌入式系统中C++内存管理基本方法
            268 0
            |
            前端开发 JavaScript
            HTML+CSS+JS仿京东购物车页面动态效果
            HTML+CSS+JS仿京东购物车页面动态效果
            370 0
            |
            算法
            递归算法和迭代算法有什么不同
            递归算法和迭代算法有什么不同
            536 1
            |
            存储 SQL 关系型数据库
            【软件设计师】一篇文章带你了解数据库
            【软件设计师】一篇文章带你了解数据库
            |
            JavaScript 数据安全/隐私保护 Python
            网易云音乐搜索接口JS逆向: Params、encSecKey加密和AES实战
            网易云音乐搜索接口JS逆向: Params、encSecKey加密和AES实战
            1463 4
            |
            算法 Java
            回溯算法详解(Back Tracking)
            回溯算法详解(Back Tracking)
            870 0
            |
            XML 安全 Java
            微信公众平台安全模式下传输xml数据包时解密方式
            微信公众平台安全模式下传输xml数据包时解密方式
            629 0
            |
            运维 应用服务中间件 Linux
            Tomcat详解(九)——Tomcat虚拟主机配置实战
            Tomcat详解(九)——Tomcat虚拟主机配置实战
            354 1
            |
            存储 算法 内存技术
            信息技术教资科3选择题相关知识点(1)
            信息技术教资科3选择题相关知识点
            769 0
            |
            网络虚拟化 网络架构
            不同网段通过静态路由实现互通
            静态路由是一种需要管理员手工配置的特殊路由。静态路由比动态路由使用更少的带宽,并且不占用CPU资源来计算和分析路由更新。但是当网络发生故障或者拓扑发生变化后,静态路由不会自动更新,必须手动重新配置。静态路由有5个主要的参数:目的地址和掩码、出接口和下一跳、优先级。 使用静态路由的好处是配置简单、可控性高,当网络结构比较简单时,只需配置静态路由就可以使网络正常工作。在复杂网络环境中,还可以通过配置静态路由改进网络的性能,并且可以为重要的应用保证带宽。
            313 0