网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
一.方法递归的概念:
在方法内部自己调用自己,存在递的过程和归的规程。
递的过程:函数自己不停的条用自己的过程。
归的过程:函数不断返回的过程。
二.什么场景下可以使用递归
1.一个大问题可以拆分成若干个相同子问题的解
2.拆分后的函数,除了数据规模不同,解题思路完全相同
3.存在递归终止条件
三.(干货)任何写出递归代码
在写递归的过程中不在纠结方法内部到底如何实现,而要注重语义(方法的功能),就假设方法已经写好,自己直接拿来用。
写出递归代码 = 终止条件+不借助任何方法解除当前问题+剩余问题交给当前方法;
举例:
求n的阶乘:
调用过程图:
例题代码
/**
* 功能:传入任意n我就能求出他的阶乘值
*
* @param n
* @return
*/
public static int 单手撕递归(int n){
//1.递归终止条件
if (n == 1){
return n;
}
//2.不需要借助任何方法,就可以解除当前问题,当前问题就是求n自身
//3.剩下的(n-1)的阶乘问题,交给 单手撕递归(int n) 这个方法
//我当前只知道n的值,剩下的值n-1我不知道,交给别人去处理
//调用单手撕递归,能帮我求出n-1的阶乘值
//最后我只需要拼接答案即可
return n * 单手撕递归(n-1);
![img](https://img-blog.csdnimg.cn/img_convert/07933e62df6166174bc36aa90d325b66.png)
![img](https://img-blog.csdnimg.cn/img_convert/b6c150cf1184213ca5d1d9d878e6a3e3.png)
**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**
**[需要这份系统化的资料的朋友,可以添加戳这里获取](https://bbs.csdn.net/topics/618668825)**
**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**