当前位置:首页 > 创业分享 > 正文内容

什么是递归?一文读懂

福瑞号2023-01-18 23:00:06创业分享292

一.什么是递归?

递归,就是在运行的过程中不断地调用自己。递归有两个过程,简单地说一个是递的过程,一个是归的过程。简单用代码来理解:

public void fun(参数) {

if (终止条件) {

return;

}

fun(参数);

(其他判断条件或语句);

}

在上边代码中,当第一次进入函数时,先判断是否符合终止条件,符合则直接结束函数,不符合入下一语句,调用自己重新进入下一层自身函数,(注意这是最外一层将不向下继续执行语句,外层卡在fun(参数处)),这个调用自己进入自身函数的操作过程即为“递”的过程。假设进入下一层后符合终止条件,返回结果,此时之前进入自身函数执行完成返回最外一层函数,最外一层函数递归调用处得到结果,(即内层函数执行完成得到结果返回值),这个过程即为“归”的过程。这时最外一层函数才能继续执行下一语句,直至函数运行完成。

什么是递归?一文读懂-图1

二.判断递归使用的场景

1.大问题可以拆分为多个子问题。

2.原问题和拆分后的子问题除了数据规模不同,解决思路完全相同。

3.存在递归终止条件。

递归在线性数据结构中使用不太明显,迭代基本可以很容易地解决问题。

递归在非线性结构中非常重要,比如二叉树,回溯,典型的树形问题-九宫格字母组合

三.递归代码的写法,(一定要注意方法的语义)

递归必须具备两个条件,

  • 一是有边界,即终止条件。

  • 二是需要调用自己。

这两个条件缺一不可,并且其中终止条件语句必须在递归调用语句之前。如果顺序颠倒则递归函数会进入死循环,永远退不出来,会出现堆栈溢出异常(StackOverflowError)。

在递归函数中,终止条件可以不止一个,递归调用也可以通过一些逻辑语句分成好几个。

四.讲一个简单且经典的实例(我认为的)

青蛙跳台阶问题:一只青蛙要跳上n层高的台阶,一次能跳一阶,也可以跳2阶,请问这只青蛙跳上n层高的台阶有多少种跳法?

问题解决:这个问题有好几种解法,这里就讲递归方法,这个问题需要逆向思维,如果从第一个台阶就开始算,就比较难想到终止条件,以及递归调用方式。我们可以让青蛙下台阶,一次可以下一个,也可以下两个。这时我们可以知道:

当n=1时,只有一种方法。

当n=2时,有两种方法。

其n>2时,青蛙可以选择跳两层台阶,也可以选择跳一层台阶。

以上我们可以得到,终止条件为台阶剩下1或2层时可以直接得到结果,即为边界。当n>2时我们可以使用递归语句调用自身。这样就可以写出递归代码:

public int climbStairs(int n){

//终止条件

if(n == 1)

return 1;

if(n == 2)

return 2;

//递归调用,此时青蛙可以选择跳一阶也可以跳两阶,所以将两种情况相加起来

return climbStairs(n-1) + climbStairs(n-2);

扫描二维码推送至手机访问。

版权声明:本文由福瑞号发布,如需转载请注明出处。

本文链接:http://furui.com.cn/42623.html

标签: 什么是递归

“什么是递归?一文读懂” 的相关文章

谢灵运是哪个朝代的(中国古代名人传)

谢灵运是哪个朝代的(中国古代名人传)

谢灵运,本名公义,字灵运。他祖父是晋车骑将军谢玄,父亲谢瑛,生来不聪明,当过秘书郎,很早就死了。谢灵运幼年时便聪明过人,谢玄感到十分惊奇。对亲近相识的人说“我生了瑛儿,可是瑛儿怎么比不上我呢。 谢灵运少年时便喜爱读书,广泛阅览各种书籍,写的文章辞藻华美,和颜延之的文章都是江南第一流的作品。文章纵横...

万足金和千足金有什么区别(千足金和万足金怎么区分)

万足金和千足金有什么区别(千足金和万足金怎么区分)

  黄金的名称花里胡哨,对于很多想要购买黄金的朋友来说太复杂了,什么是千足金,什么又是万足金,这两者又有什么区别?怎么选择?二者回收价格有区别吗?今天我们就来聊一下。      什么是千足金、万足金   千足金:千足金,标识及别名是足金999、足999、au999等等,千足金就是金含量不低于99....

四川地震为什么多(为什么四川地震频发)

四川地震为什么多(为什么四川地震频发)

据中国地震台网正式测定,10月22日13时17分在四川甘孜州泸定县发生5.0级地震,震源深度12千米,震中位于北纬29.61度,东经102.03度。此次泸定5.0级地震是9月5日四川泸定6.8级地震的一次强余震,两次震中相距5公里。 是的,四川又地震了。作为国内地震频率最高的省份,在地震面前,四...

关晓彤演过的电视剧大全(关晓彤6部电视剧)

关晓彤演过的电视剧大全(关晓彤6部电视剧)

关晓彤6部影视剧,看过4部的是真爱粉,第6部你肯定没看过 1、关晓彤在《大丈夫》中饰演欧阳淼淼,主要饰演了一个娇蛮的女儿,与自己的妈妈杀回父亲家,促使父亲与后妈之间发生了一连串的事情,也使这个家庭处于纷乱的混战中。剧中造型多为叛逆型,可爱任性,卷发非主流。 关晓彤6部影视剧,看过4部的是真爱粉,...

世界十大顶级乐队排名(全球十大乐队排行榜)

世界十大顶级乐队排名(全球十大乐队排行榜)

第十名:老鹰乐队 非常明了的摇滚曲风,《加州旅馆》是不是大部分人都知道,建议没有听过此曲的可以在一个风和日丽,心情平缓的环境去听,很有意境。 第九名:金属乐队 看名字就明白,他们坚持重金属风格,而且经过长时间的风风雨雨,他们终于大放异彩。让人听了为之悸动。 第八名:邦乔维 bonjoy 这个乐队...

贝尔金路由器设置教程(路由器的设置方法)

贝尔金路由器设置教程(路由器的设置方法)

路由器是连接各个网络的设备,它能够以最佳的路径将接收到的信号发送出去,是互联网络的枢纽。路由器具有判断网网络地址和选择网络IP的功能,能在多个互联网络中建立连接,同时路由器只接受源网站和其他路由器的信息,属于互联设备。 TP-LINK AX3000满血WiFi6千兆无线路由器 ¥299 京...