什么是递归:
递归是将大问题拆成相同的若干小问题,利用自己调用自己的方式解决问题。
递归的重点就是如何将问题拆解,并在什么样的条件跳出自我循环,这是递归的难点。
如何理解递归:
示例:已知有五个人,第五个比第四个大两岁,第四个比第三个大两岁,第三个比第二个大两岁,第二个比第一个大两岁,第一个人十岁,问第五个几岁。
//输出第五个人的年龄
public class digui {
//void 是没有返回值的方法
public static void main(String[] args) {
System.out.println("第五个人的年龄:");
int res;
res = age(5);//5
System.out.println("res = " + res);
}
//递归代码(1)
public static int age(int n) {//5
int res;
if (n == 1) {
res = 10;
} else {
//递归代码(2)
res = age(n - 1) + 2;
System.out.println("res = " + res);
}
return res;
}
}
以上面为例,递归由两部分组成
只有这两类同时存在,才能成为一个完整的递归函数。
递归的第一部分是创建一个函数,只要在该函数里识别到一摸一样的名字,就又进入了该函数,这样一直循环下去。
就像一个大房子,我圈出的第一部分是大房子的门,代码进行到这里就进入这个大门,这个大房子里还有第二个门,就是我圈出的递归第二部分,代码进行到这里就进入了第二个门,当代码把第二个门打开,发现还是一模一样的屋子,里面还有一个门,虽然整个代码只有两个门,但我们都知道,这个房子里面有无数个一模一样的屋子,一模一样的门,只有拿到if的条件那么代码才会一层门一层门的关起来从而跳出自身递归的循环。
为了更好理解,我在输出结果中把每次关门结果打印出来。
输出结果:
第五个人的年龄:
res = 12
res = 14
res = 16
res = 18
res = 18
Process finished with exit code 0