递归(Recursion)
- 定义:方法自己调用自己,每一次调用传入不同的变量。递归有助于编程者解决复杂的问题,同时让代码变得更加简洁
- 递归调用规则
- 当程序执行到一个方法时,就会开辟一个独立的栈空间。
- 每个空间的数据(局部变量),是相互独立的,不会相互影响,打印问题。独立的局部空间和变量
- 如果方法中使用的是引用类型的变量,就会共享该引用类型的数据,共用的空间。
- 递归必须包含推出递归的条件,避免死循环,出现StackOverflowError,栈溢出
- 当一个方法执行完毕后,或者遇到一个return,就会返回,遵循谁调用就将结果返回给谁。
- 递归能够解决的问题
- 数学问题:死亡八皇后问题,汉诺塔问题,阶乘问题,迷宫问题,球和篮子的拜访问题
- 各种算法,快排,二分查找,分治算法
- 将用栈解决的问题,用递归解决更加简洁
- 运用递归必需的两个条件
- 递归终止条件
- 递归方法体
- 变量的分类–局部变量和公共变量
基本代码:
public class Recursion1 {
static int m = 4;
public static void main(String[] args) {
System.out.println(add(4));
}
public static int add(int n){
if(n > 1){
System.out.println(m);
//此为共享变量,共同操作
System.out.println(n);
//局部变量n
return add(n - 1);
//上述语句是循环结构
}else{
return 1;
//递归终止条件
}