什么是递归:
就是方法自己调用自己
public static void test1(){
System.out.println("-------------");
test1();
}
public static void main(String[] args) {
test1();
}
使用递归:
要有条件的使用递归
public static void printNum(int num){
num--;
if(num >= 1){
printNum(num);
}
System.out.println(num);
}
public static void main(String[] args) {
printNum(5);
}
如果没有 if(num>=1)这个条件 那么这个方法会陷入死循环
性质和while(true)比较类似。
public static void printNum(int num){
num--;
printNum(num);
System.out.println(num);
}
public static void main(String[] args) {
printNum(5);
}
//这样会一直输出打印 特别占用资源 方法入栈那么太多就会导致栈内存溢出。造成安全隐患。
所以这个条件也被称为递归的出口。
要求:
内存角度 可能递归的次数太多,导致栈内存溢出
带返回值的递归
public static int getSum(int num){ //返回值变成了int
//要有条件递归
if(num > 1){ //比较逻辑运算符
return getSum(num - 1) + num; //返回int类型
} else {
return 1; //返回int类型
}
}
public static void main(String[] args) {
int sum = getSum(5);
System.out.println("sum = " + sum);
}
根据递归做一个练习
5的阶乘:
5! = 5 * 4 * 3 * 2 * 1
有一对兔子,从出生后第3个月起每个月都生一对兔子,
小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,
问第二十个月的兔子对数为多少?
规律:从第三个月开始,第n月是第n-1和n-2月的和
|
|