目录
写出递归代码 = 终止条件+不借助任何方法解除当前问题+剩余问题交给当前方法;
一.方法递归的概念:
在方法内部自己调用自己,存在递的过程和归的规程。
递的过程:函数自己不停的条用自己的过程。
归的过程:函数不断返回的过程。
二.什么场景下可以使用递归
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);
}