定义 :在方法体内部调用当前方法 ,也可以说是自己调用自己。
基本思想:
以此类推是基本思想
循环也是,递归和迭代是等价的(迭代就是循环)
步长、终止条件、初始值
应用场景 :
一般树状结构的都可以使用递归查询
递归比普通的算法耗内存,运行效率低,谨慎使用
能用循环搞定,尽量不用递归
演示实例 : 使用for完成1-100的累加加和 使用递归完成1-100的累加加和 使用递归完成斐波那契数列 使用for完成斐波那契数列
public static void main(String[] args) {
System.out.println(sum(100));
System.out.println(m1(5));
m2(5);
}
//使用for方法
//因为没有终止条件,所以栈内存溢出
//Exception in thread "main" java.lang.StackOverflowError
public static void m1() {
m1();
}
public static int sum(int a) {
int sun = 0;
for(int i = 1;i <= a;i++) {
sum += i;
}
return sum;
}
//5+4+3+2+1
public static int m1(int a) {
if(a == 1) {
return 1;
}else {
// 4 = 4 + 3 + 2 + 1
// 5 = 5 + 4 + 3 + 2 + 1
// 5 = 5 + m1(4)
// 4 = 4 + m1(3)
// 3 = 3 + m1(2)
// 2 = 2 + m1(1)
// 1 = 1
return a + m1(--a);
}
}
static int sum = 0;
//使用递归方法
//5+4+3+2+1
public static void m2(int a ) {
if(a == 1) {
sum += 1;
System.out.println(sum);
return;
}
sum += a;
m2(a - 1);
}