首页 > 其他分享 >一篇看懂递归的套路解题法

一篇看懂递归的套路解题法

时间:2023-05-19 09:12:16浏览次数:29  
标签:index arr return 递归 套路 解题 数组 我们

递归

所谓递归,不过是将一个复杂问题分解为一个更小的问题进行求解,在这里我们不再扯太多犊子了,网上有太多递归的介绍让人眼花缭乱摸不着头脑,我们直接开始讲解递归的解体思路。

第一步:求解最基本问题并将其返回

这一步也就是网上所谓的递归出口,但是个人认为递归出口不太能很好的描述这个意思,其实本质就是求出来最简单的问题最后一项并将其返回,一般这个项也就是返回一个1或者0之类的东西。不说废话,举个例子。

计算数组arr[index.... n)范围里的数字和

传入一个下标index,求从index开始到最后一项的和,我们直接开始求这个问题的最后一项的值,毫无疑问,数组的最后一项的再后一项的值为0,也就是当index等于我们的数组长度时的值为0。(防止新手看不懂,这里的数组长度是指从1开始加的值,举个例子一个数组下标0,1,2,其实数出来的长度为3)

因此我们写好求解最基本问题并将其返回的这段代码

if(index == arr.length){
    return 0;
}

ok开始我们的第二步

第二步:使用递归函数本身并加上一些操作实现功能需求

这里就是我们递归最关键的一点,我认为我们在这个地方有一个大坑,就是过度的去关注我们在写一个递归,从而把自己绕进去。打个比方,就是不用老是觉得A函数在调用A函数自己,其实我们把他看作A函数在调用B函数来解决问题就好了。ok说了这么多,直接开始3步走。

  • 再次写一遍递归函数,但是注意可变参数要变化,一般就是下几个或加几(类比我们for循环要i++或i--一样)

  • 调用递归函数之后再进行一些操作(这个要自己想)

  • 将上面代码return

还是上面的例子,思考一下,是不是累加就是将当前下标的值加上下一个下标的值,所以就是

return arr[index] + sum(arr, index + 1);

总结一下:

public static void sum(int[] arr,int index){
    if(index == arr.length)
        return 0;
    return arr[index] + sum(arr, index + 1);
}

 

标签:index,arr,return,递归,套路,解题,数组,我们
From: https://www.cnblogs.com/hanlinyuan/p/17413908.html

相关文章

  • Uva--548 Tree(三个递归遍历/重建二叉树)
    记录23:132023-5-18uva.onlinejudge.org/external/5/548.htmlreference:《算法竞赛入门经典第二版》例题6-8使用中序遍历和后序遍历还原二叉树,还行,还是熟悉的。收获的点:使用数组快速建立二叉树(还是要变通,《数据结构与算法分析》中标准的使用了结构体指针,太过学术了?函数......
  • Java实现输出九九乘法表—for循环和递归算法
    Java实现输出99乘法表for循环publicclassninenine{publicstaticvoidmain(String[]args){for(inti=1;i<10;i++){for(intj=1;j<=i;j++){System.out.printf("%d*%d=%d\t",j,i,j*i);}......
  • 7、递归和回溯法
    内容来自刘宇波老师玩转算法面试7.1、树形问题7.2、什么是回溯7.3、排列问题7.4、组合问题7.5、回溯法解决组合问题的优化7.6、二维平面上的回溯法WordSearch7.7、floodfill算法,一类经典问题NumberofIslands-7.8、回溯法是经典人工智能的基础NQueens......
  • 「解题报告」P3703 [SDOI2017]树点涂色
    有趣题,代码超好写,而且思路超有趣!!!首先发现操作1的操作都是某个点到根,不难发现这样每种颜色一定对应着树上的一条链。那么操作2可以直接树上查分求答案,这样我们只需要考虑维护每个点到根的链的数量了。怎么维护链的数量?发现这个操作1长得和LCT的Access操作一模一样啊,所......
  • 6、二叉树和递归
    内容来自刘宇波老师玩转算法面试1、二叉树天然的递归结构二分搜索树2、一个简单的二叉树问题引发的血案3、注意递归的终止条件4、定义递归问题5、稍复杂的递归逻辑6、二分搜索树中的问题......
  • python高级技术(死锁、递归锁、信号量、Event时间、进程池、线程池、协程)
    一死锁和递归锁(了解)进程也有死锁与递归锁,使用方法类似所谓死锁:是指两个或两个以上的进程或线程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程。当你知......
  • Django用递归实现查询所有子部门逻辑
    假设你已经定义好了部门模型Department,该模型包含以下字段:classDepartment(models.Model):name=models.CharField(max_length=100)parent_department=models.ForeignKey('self',on_delete=models.CASCADE,null=True,blank=True)其中,name表示部门名称,paren......
  • 题目26:利用递归方法求 5的阶乘
    题目:利用递归方法求 5! 。deffactorial_fun(integer):ifinteger-1==0:return1returninteger*factorial_fun(integer-1)print(f'5!={factorial_fun(5)}')https://blog.csdn.net/run_noob_vip/category_11598442.html题目26+......
  • [AGC013C] Ants on a Circle 解题报告
    洛谷题面AT题面CF625F先考虑弱化版,若是不考虑编号怎么办。这个问题有一个很经典的结论,碰撞等同穿过,所以直接算出每个点按照指定方向走,在\(t\)秒后的位置即可。现在多了一个编号,因为是碰撞,所以两个点的相对位置是相同的,即\(x\)号点原来是\(y\)号点顺时针方向的第几个点,......
  • 递归函数
    1.递归函数简单实例:2.递归函数注意点:python默认递归1000次 3.递归的两个阶段:回溯和递推 4.递归的实际应用场景:取出列表中所有的值 ......