什么是递归?
解决具有规律性的问题时,在方法内部再次调用自身方法的一种编程方式。
何时使用递归?
1、当需要解决的问题可以拆分成若干个小问题,大小问题的解决方式相同,方法中自
调用自己。
2、使用循环解决的常规问题,都可以替换为递归解决。
如何正确使用递归?
设置有效的出口条件,可以让调用链上的每个方法都可以正确返回,避免无穷递归。
下面的代码就属于无穷递归的一种;
在运行过程中,sumA调用sumB,sumB又来调用sumA,
两者之间来回调用,这样就进入了无穷递归
运行之后就会内存溢出(如下图)
public class Demo{
public static void main(String args[]){
sumA();
}
public static void sumA() {
System.out.println("这是sumA");
sumB();
}
public static void sumB() {
System.out.println("这是sumB");
sumA();
}
}
使用递归求阶乘
public class Demo{
public static void main(String args[]){
//调用阶乘的方法 求5的阶乘
int result=factorial(5);
System.out.println(result);
}
//求阶乘的递归方法
public static int factorial(int a) {
if(a==1) {
return 1;
}
return a*factorial(a-1);
}
}
关于递归算法:我主页还有一个用递归求斐波那契数列的代码
→→→Java-使用递归求前20个斐波那契数列的数