00:00
当人们提到递归一词,不知道如何理解它,也有人会问,递归和迭代有什么区别?首先可以从定义上入手来分析,递归是自身调用自身的函数进行循环,遇到满足终止条件的情况时,逐层返回来结束,迭代则是函数内某段代码实现循环,循环代码中参与运算的变量同时是保存结果的变量,当前保存的结果作为下一次循环计算的初始值。如何实现?递归算法的设计方法递归算法即是一种有效的算法设计方法,也是一种有效的分析问题的方法。递归算法求解问题的基本思想是,对于较为复杂的问题,把原问题分解成若干个相对简单且类同的子问题,这样原问题就可递推得到,求解适宜用递归算法求解的问题的充分必要条件是,其一,问题具有某种可借用的类同自身的子问题描述的性质。其二,某一。
01:00
必有限度的子问题,也称作本源问题,有直接的解存在。如何去理解递归算法?从小老师就教我们如何高效的从一加到100。如果我们在没有了解过高斯技术的情况下,我想大部分人都会一个一个进行累加的方式,这样是不是得不偿失呢?那么如何描述它的代码结构呢?从上述算法中可以看出,都可以得出结果是5050,那么不仅有小伙伴会问这两个都可以得出相应的结果。那我在工作中如何使用那种方案呢?关于这一点就要去分析他们的时间复杂度和空间复杂度了。先去计算它的时间复杂度,假设时间复杂度为三一,那么FN的计算方法,第一行执行了一个时间单位,第二行执行了N个时间单位,第三行执行了N个时间单位,可以得出FN1,因为时间复杂度表示的是算法随N变化的一种。
02:00
趋势,而fe表示的就是一种线性增长关系,为了统一表达忽略常数项和系数,可的时间复杂度为O,空间复杂度是随N的变化而变化,因此空间复杂度为O。递归的算法最典型的是递归求斐纳器数列的算法,这个求斐波期的递归算法的时间复杂度是多少呢?在讲解递归时间复杂度的时候,我们提到了递归算法的时间复杂度本质上是要看递归的次数,每次递归的时间复杂度可以看出上面的代码每次递归都是凹鱼的操作。再来看递归了多少次,这里将AA为五作为输入的递归过程抽象成一颗递归树如图,从图中可以看出F5是由F4和F3相加而来,那么FX是由F3和F2相加而来,以此类推,在这棵二叉树中,每一个节点都是以此递归。那么这棵树有多少。
03:00
个节点呢?我们之前也有说到一个深度按根节点深度为一位K的二差数最多可以有2K一个节点,所以该递归算法的时间复杂度为on,这个复杂度是非常大的,随着N的增大,耗时是指数上升的。如何去理解递归算法的数据推导?数学中经常有这样的函数,它自己定义自己,例如N的阶常函数fnn than为整数fe n Fn n31 N1,当N小于或等于一时,它分的值为一。例如F3,负零,负11,当N大于一时,FN是递归定义的,因为右侧也有,但这不会导致循环玩意,因为右侧F的参数小于左侧fe的参数,例如和22次一,因为F11,所以F212,以此类推。F332326,假定FN是直接递归的钥匙函数。
04:00
FN的递归定义有一个完全的形式,需要满足如下条件,有一个基础部分best component,它包含N的一个或多个值,对这些值,FN是直接定义的,即不用递归就能求解。为简单起见,我们假定C的定义是非负整数,基础部分包含0AK,其中K为做负常数NK的情形也是可能的,但很少见。在递归部分re recordive component,右侧F有一个参数小于N,因此,重复应用递归部分可以把右侧F的表达式转变为基础部分。总之,递归算法是程序设计中一种重要的方法。在数学和计算机科学中,使用递归的思想能解决很多运算量较大的问题,节省大量的人力资源和时间。但对于递归的概念,初学者往往感到不容易理解。那么为什么还要引入递归的概念呢?其一,有很多数学函数。
05:00
本身就是递归定义的,如阶成函数,当N一时,N一时N1,当N一时NX念一分等,VH等于Z等零,Z等于等等于Z等。其二,有些数据结构,如二叉数、广义表等,由于结构本身固有的递归特性有关,他们的操作就可以采用递归函数来实现。其三,还有一类问题C问题本身没有明显的递归结构,但用递归法求解则更简洁明了,如快速排序问题图的深度优先搜索问题等。PCF方式阅读普通人如何理解递归算法?更新说明,优先更新微信公众号一页的博客后,更新博客之后才会陆续分发到各个平台。如果先提前了解更多,请关注微信公众号语业的博客。本文地址,如何理解分治思想?
06:00
博客来源,雨夜的博客。
我来说两句