专栏电商日志财经减肥爱情
投稿投诉
爱情常识
搭配分娩
减肥两性
孕期塑形
财经教案
论文美文
日志体育
养生学堂
电商科学
头戴业界
专栏星座
用品音乐

一文精通递归算法

  一、什么是递归?
  自己调用自己,当业务逻辑符合以下三个条件的时候,就可以考虑使用递归来实现。 一个问题可以分解为多个子问题; 当前问题与其子问题除了数据规模不同外,求解思路完全一样; 存在递归终止条件; 二、为什么要使用递归?
  理论上,任何递归代码都可以使用非递归的方式进行实现,那么为什么还要使用递归呢?
  递归求解本质上是使用系统提供的栈来实现的,由系统为我们自动递归求解;如果改成非递归的方式,那么我们其实就是在手动递归,本质上这两种方式没有任何区别。但是相同的逻辑,两份代码,递归实现明显更加地简洁,更加有利系统的维护。 三、如何使用递归?
  我们以一个实际的例子来演示如何使用递归。
  假设,有n个台阶,我们一步可以跨一个台阶,也可以一步跨两个台阶,那么这n个台阶总共有多少种跨法?
  我们按照递归使用的三个条件来分析下: 是否可以分解为子问题? 是的,我们跨上第n阶台阶时,要么是一步一个跨上去的,要么就是一步两个跨上去的,所以问题就分解为"跨上n-1个台阶有多少种跨法"+"跨上n-2个台阶有多少种跨法",递推公式可以表示为 f(n)=f(n-1)+f(n-2)  ; 当前问题和子问题的求解思路是否一样? 是的 是否存在终止条件? 是的,当n为1的时候,就一种跨法,当n为2的时候有两种跨法,当n为3或者4的时候,可以拆解为子问题,所以终止条件就是 f(1)=1,f(2)=2  ;
  分析完之后,我们就得到了带终止条件的递推公式,再转换为代码即可: int countSteps(int n){     if(n == 1) {         return 1;     }     if(n == 2) {         return 2;     }          return f(n-1) + f(n-2); }
  递归的求解过程确实很难一下子就理解清楚,这是由于我们人脑的机制造成的,谁都会感觉这样。
  我们应该假设子问题f(n-1)和f(n-2)已经得到求解,然后在此基础上去求解当前的问题f(n),得到一个递推公式,如此只思考两层之间的关联关系会简单很多,千万不要试图去分解和理解每个递归层次的过程。 四、使用递归需要注意什么?4.1 堆栈溢出
  当递归调用深度过深的时候,就很容易出现栈溢出的问题,此时最好的方法就是根据业务场景逻辑和JVM的栈大小确定一个合理的最大递归深度,当超过该深度值的时候,程序抛出异常; 4.2 重复计算
  子问题的子问题可能会出现重复的问题,比如f(6)=f(5)+f(4),其中,f(5)和f(4)都会有子问题f(3),那么f(3)应该是不需要重复计算的。
  我们可以将求解过的问题结果保存到散列表中,当递归调用执行时,先检查该问题是否已经求解过了,如果是那么直接从散列表中获取结果返回即可,只有没有求解过的问题,才继续递归调用; int countSteps(int n){     if(n == 1) {         return 1;     }     if(n == 2) {         return 2;     }          // 先从散列表中检查是否已经对f(n)求解过了     if(resultMap.get(n) != null){         return resultMap.get(n);     }     int result = f(n-1) + f(n-2);     // 将当前问题f(n)结果保存到散列表     resultMap.put(n,result);     return result; }4.3 时空复杂度
  空间复杂度方面,因为递归深度决定着栈的使用程度,所以空间复杂度为O(n);
  时间复杂度上面,虽然入栈和出栈都是O(1),但是如果递归深度较大的话,函数上下文切换等造成的时间开销也会比较可观; 4.4 递归环
  有时候,可能由于脏数据的问题,会导致递归环的存在,比如在找原始推荐人的时候,A推荐了B,B推荐了C,C推荐了D,然后有一条脏数据,导致A的推荐人是D,那么在递归寻找原始推荐人的时候,就会陷入环中,可以设置一个最大递归深度来解决这个问题。

湖南16地入选中国天然氧吧,氧气满满!看看有你家乡吗?2021年中国新增天然氧吧56个。其中,湖南永州市冷水滩区祁阳市和新田县入选。继2020年道县蓝山县东安县2018年江华瑶族自治县平江县宁远县2019年江永县零陵区双牌县古丈县通道全国哪里的酱油最好吃?经过评比,这7款最为出名,有你家乡吗?导读酱油是我们日常中最常使用的调味品之一,早在三千多年前,中国周朝就有制作酱的记载了,当时,酱油还是中国古代皇帝御用的调味品。而最早的酱油是由鲜肉腌制而成,和鱼露的做法很接近,而随九十九道拐,峨眉山的天梯过了洪椿坪之后,登山之路开始愈发陡峭。从这里一直到仙峰寺,是长达15公里连续上坡路,也是峨眉山从低山区到中山区的天梯。虽然走得艰辛,但一直没有寻得印象中让人望而生畏的九十九道拐,倒站在这个大门口,看人性黑暗的一面我去过兰州,偶尔间和这座城市产生情感。那是前几年在拉萨高反,返途中突然想到在兰州休息调整。这次休息调整,让我彻底爱上了这座城市,以至于后来逢人便说兰州的好。我对别人,这里水果丰富,华为一口气发布5款重磅新品!新折叠屏手机不到6000作者番番来源极果编辑部一直以来,大家都爱用理工男三个字调侃华为手机外观,尤其Mate系列,商务范十足。但自去年上新华为P50Pocket后,大家才发现原来华为手机也能凭外观出圈,小双11游戏耳机音珀H3深度测评,听声辩位如臻化境,不到500虽说无线蓝牙耳机代替有线耳机已经成为主流趋势,但是,不可否认的是,零延迟音质佳功率高的有线耳机依旧是有市场,就像手机拍照已经牛,依旧会有单反相机的拥趸,有线耳机亦是如此,那些对音质蓝牙耳机哪个品牌最好?经销商整理双十一热销蓝牙耳机推荐蓝牙耳机是我们平时必不可少的数码单品,厂商们取消3。5mm耳机接口以后为蓝牙耳机的普及带来了契机,这几年蓝牙耳机持续火爆。但很多朋友都不知道蓝牙耳机哪个品牌最好,因此总有人问阿鑫有要跑?刘强东转让京东所持股份,真实情况到底如何?近日,刘强东将所持京东产发即江苏京东邦能投资管理有限公司股权转让予京东集团副总裁缪钦。变更完成后京东产发股东为缪钦(持有45)李娅云(持有30)及张雱(持有25)。此前,京东健康京这才是日本女人反油腻的秘诀坚决不穿老年装,妆发精致又得体秋日生活打卡季青春是个短暂的美梦,虽然总说年龄只是数字,气质才是永恒,但总有人会在三四十岁以后的年纪,不知不觉向油腻老气低头。老了就得穿老年装上了年纪就会油腻?一生爱美的女人表示这面部折叠度越高,脸越高级?面部折叠度越高,脸就越小越高级。这是真的吗?那什么样的脸才算得上是高折叠度?怎样的脸看上去更高级?大家可以在自己的正面照片上,先找到颧骨最突出点和下巴尖,用画线的方法将颧骨和下巴边60岁后抗衰老,营养锻炼缺一不可到了60岁后,会发现身体上的一些衰老痕迹变得更加明显了,身体动不动就生病,不是这种病,就是那种病,60岁以前,身体还没那么差,过了60岁,虽然没啥大问题,可是小问题却是不断。更为关
阿里巴巴在马云时代有多辉煌,在张勇时代就有多落寞编辑于斌出品潮起网于见专栏时势造英雄。自1987年算起,过去三十余年的互联网时代,让无数光芒四射的互联网平台与新时代企业相继崛起,也让无数不甘平凡的创业者前仆后继,或功成名就或遭受奋战开门红甘肃药业集团宣肺止嗽合剂销量同比增长298。732022年,甘肃药业集团营销中心积极应对新冠疫情反复冲击和中药行业经营整体下行等多重挑战,于危机中育先机,于变局中开新局,经营业绩实现全年旺。重点产品元胡止痛滴丸宣肺止嗽合剂销量均甘肃省疏勒河中心举办文明和谐家庭主题道德讲堂活动中国甘肃网2月9日讯(本网记者程健通讯员王亚虎)为传承良好家风,培育良好家教,树立向善向上孝老爱亲夫妻和睦的文明风尚,2月7日下午,甘肃省疏勒河中心举办道德讲堂活动。道德讲堂以文明100年前的人类预测2023年癌症被消除,人可以活到300岁1923年,一批具有超前思想的科学家对100年后的人类做了预测。包括癌症将会被消除,人类可以活到300岁,女人会变得更加漂亮等等。癌细胞与正常细胞对比其中有精准的预言,也有荒谬的说iPhoneUltra渲染图曝光魅族内部PPT意外泄露苹果iPhoneUltra渲染图曝光2月7日,星期二,欢迎收看今天的科技V报,我是Geek枫云,昨天,我们提到彭博社记者MarkGurman爆料称,苹果将会在ProProMax机型李大钊孙子被举报贪污,中纪委去调查李厅长20年骑坏4辆自行车2005年,中纪委收到了许多举报信。这些举报信,众口一词地指向了李大钊的孙子李宏塔,检举他贪污受贿。李大钊,我们都知道,他是中国共产党的主要创始人之一,是伟大的革命先驱。他为了革命亲子共读木兰诗,感受团圆家文化2月5日下午,元宵有戏国粹戏曲庆团圆活动在馨巢书屋欢乐上演。作为黄浦区妇女联合会主办的2023年度国风美育家庭文明系列活动之一,10余组亲子家庭一起吃元宵听故事读古诗猜灯谜品戏曲做辛巴为何执着于打造辛选供应链?来看供应链对直播电商的重要性直播电商已然进入新的发展阶段,许多企业都逐渐意识到了供应链的重要性。作为直播电商头部企业,辛选集团创始人辛巴对供应链的认知可谓抢先一步。早在辛选集团创立初期,直播电商还没像现在这么望海楼忙起来的中国充满希望春回大地,万象更新。放眼神州,人们又忙碌了起来车站大屏,列车发车的间隔短了餐厅门口,取号等座的队伍长了田间地头,往返劳作的脚印密了工厂车间,机器轰鸣的声音高了一个重新忙起来的中国,中国小伙掉入大西洋,外国船长大喊别救,喝鸟血吃鲨鱼肉撑133天如果你乘船大洋上遇到事故,应该如何展开海上自救?我们知道,大西洋是世界第二大洋,平均深度3600多米,最深处达9200多米。大西洋充满活力,寒暖流交汇形成各大著名渔场。潘濂海上漂流我国国土最南端曾母暗沙曾母暗沙位于南沙群岛最南端。曾母暗沙位于南康暗沙的海宁礁和大约70公里。曾母暗沙距离亚西暗沙只有50公里,曾母暗沙距离纳土纳群岛大约有400公里,曾母暗沙距离我国广东省大约有190
友情链接:快好知快生活快百科快传网中准网文好找聚热点快软件