递归方法

递归方法一、什么是递归递归是指函数直接或间接调用自身的一种编程方法。调用的过程就是“递”,返回的过程就是归。基本上,所有的递归问题都可以用递推公式来表示。二、递归满足的三个条件1.一个问题的解可以分

大家好,又见面了,我是你们的朋友全栈君。

一、什么是递归

  递归是指函数直接或间接调用自身的一种编程方法。调用的过程就是“递”,返回的过程就是归。基本上, 所有的递归问题都可以用递推公式来表示。 

二、递归满足的三个条件

1. 一个问题的解可以分解为几个子问题的解。何为子问题? 子问题就是数据规模更小的问题。 

2,这个问题与分解之后的子问题, 除了数据规模不同, 求解思路完全一样
3. 存在递归终止条件
把问题分解为子问题, 把子问题再分解为子子问题, 一层一层分解下去, 不能存在无限循环, 这就
需要有终止条件。

三、如何编写递归代码

写递归代码的关键就是找到如何将大问题分解为小问题的规律, 并且基于此写出递推公式, 然后再推敲终止条件, 最后将递推公式和终止条件翻译成代码

对于递归代码, 这种试图想清楚整个递和归过程的做法, 实际上是进入了一个思维误区。 很多时候, 我们理解起来比较吃力, 主要原因就是自己给自己制

造了这种理解障碍。 那正确的思维方式应该是怎样的呢?

如果一个问题 A 可以分解为若干子问题 BCD, 你可以假设子问题 BCD 已经解决, 在此基础上思考如何解决问题 A。 而且, 你只需要思考问题

A 与子问题 BCD 两层之间的关系即可,不需要一层一层往下思考子问题与子子问题, 子子问题与子子子问题之间的关系。 屏蔽掉递归细节, 这样子理

解起来就简单多了。因此, 编写递归代码的关键是, 只要遇到递归, 我们就把它抽象成一个递推公式, 不用想一层层的调用关系, 不要试图用人脑去分解递

的每个步骤 

 

四、递归的优点和缺点

1.优点:代码表达能力强,写起来简单

2.缺点:空间复杂度高,存在堆栈溢出风险、存在过多的重复计算、过多的耗时函数调用等。

 

参考:极客时间《数据结构与算法之美》

 

 

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/154987.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • InnoDB中的索引类型

    InnoDB中的索引类型InnoDB数据引擎使用B+树构造索引结构,其中的索引类型依据参与检索的字段不同可以分为主索引和非主索引;依据B+树叶子节点上真实数据的组织情况又可以分为聚族索引和非聚族索引。每一个索引B+树结构都会有一个独立的存储区域来存放,并且在需要进行检索时将这个结构加载到内存区域。真实情况是InnoDB引擎会加载索引B+树结构到内存的BufferPool区域。聚簇索引(聚集索引)聚簇索引指的是这样的数据组织结构:索引B+树的每个叶子节点直接对应了真实的DataPage。并且B+树所有的叶子节点在最底层共同描

    2022年6月1日
    33
  • java 接口default_接口default方法作用

    java 接口default_接口default方法作用在java8以后,接口中可以添加使用default或者static修饰的方法,在这里我们只讨论default方法,default修饰方法只能在接口中使用,在接口种被default标记的方法为普通方法,可以直接写方法体。实现类会继承接口中的default方法如果接口A中有default方法:publicinterfaceA{ publicdefaultvoida(){ System…

    2022年8月30日
    4
  • python 根据uuid 获取mac地址

    python 根据uuid 获取mac地址importuuidtry:mac=uuid.UUID(int=uuid.getnode()).hex[-12:]mac_address=’:’.join([mac[e:e+2]foreinrange(0,11,2)])except:mac_address=”print(mac_address)

    2022年8月10日
    36
  • 据说很快的数据库分页存储过程

    据说很快的数据库分页存储过程

    2021年5月4日
    118
  • MATLAB插值函数interp1

    MATLAB插值函数interp1插值法    插值法又称“内插法”,是利用函数f(x)在某区间中已知的若干点的函数值,作出适当的特定函数,在区间的其他点上用这特定函数的值作为函数f(x)的近似值,这种方法称为插值法。如果这特定函数是多项式,就称它为插值多项式。线性插值法    线性插值法是指使用连接两个已知量的直线来确定在这两个已知量之间的一个未知量的值的方法。    

    2022年6月13日
    119
  • Java安全之Fastjson反序列化漏洞分析

    Java安全之Fastjson反序列化漏洞分析首发:先知论坛0x00前言在前面的RMI和JNDI注入学习里面为本次的Fastjson打了一个比较好的基础。利于后面的漏洞分析。0x01Fas

    2021年12月13日
    41

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号