递归方法

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

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

一、什么是递归

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

二、递归满足的三个条件

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

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

三、如何编写递归代码

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

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

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

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

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

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

的每个步骤 

 

四、递归的优点和缺点

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

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

 

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

 

 

 

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

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

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


相关推荐

  • 阿里云URL转发类问题排查[通俗易懂]

    阿里云URL转发类问题排查[通俗易懂]概念URL转发包含URL隐性转发和URL显性转发,主要是指将一个域名指向另外一个已经存在的站点时,可以通过URL转发实现。隐性URL转发是用的是iframe框架技术,显性URL转发采用的是301(也称之为永久性转移)或302重定向技术(也称之为暂时性转移)。301和302说明301redirect:301代表永久性转移(PermanentlyMoved)302redirect:302代表暂时性转移(TemporarilyMoved)共同点:301和302状态码都表示重定向,当浏览

    2022年10月19日
    1
  • python2 nonlocal_python unboundlocalerror

    python2 nonlocal_python unboundlocalerror在廖雪峰的官网上看到一个很有意思题目。关于闭包的,有兴趣的朋友可以看一下这里,做一下这个题目,当然需要一点闭包的知识。下面我简述一下:利用闭包返回一个计数器函数,每次调用它返回递增整数。#修改下面这个函数defcreateCounter():defcounter():passreturncounter#测试:counterA=createCounter()print(counter…

    2022年9月6日
    3
  • css3 画半圆和1/4圆

    css3 画半圆和1/4圆

    2021年9月13日
    63
  • 获取activexobject对象失败_script引用外部js

    获取activexobject对象失败_script引用外部js一、什么是ActiveX控件?MicrosoftActiveX控件是由软件提供商开发的可重用的软件组件。使用ActiveX控件,可以很快地在网址、台式应用程序、以及开发工具中加入特殊的功能。例如,StockTicker控件可以用来在网页上即时地加入活动信息,动画控件可用来向网页中加入动画特性。  现在,已有1000多个商用的ActiveX控件。开发控件可以使用各种编程语…

    2022年10月14日
    0
  • 作为一个程序员,什么是脚本。必须要理解「建议收藏」

    作为一个程序员,什么是脚本。必须要理解「建议收藏」Javascript是一门动态类型、面向对象的脚本语言。对脚本进行一个感性的认识。就是一个跟计算机执行的文本。理解脚本如果你打开一本JavaScript教程,那么很可能在第一章就看到这句话

    2022年8月2日
    2
  • leetcode 颜色分类_leetcode难度

    leetcode 颜色分类_leetcode难度给定一个包含红色、白色和蓝色,一共 n 个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。此题中,我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色。示例 1:输入:nums = [2,0,2,1,1,0]输出:[0,0,1,1,2,2]示例 2:输入:nums = [2,0,1]输出:[0,1,2]示例 3:输入:nums = [0]输出:[0]示例 4:输入:nums = [1]输出:[1] 提示:n == num

    2022年8月9日
    3

发表回复

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

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