规则
递归指的是方法中调用方法本身的现象
作用
把一个复杂的问题转变为一个与原问题相似的规模较小的问题进行求解。递归策略只需少量的程序就可描述出解题过程所需的多次重复计算
核心
- 找出口:什么时候不再调用方法本身
- 找规则:如何把大问题转变为规模较小的问题
注意点
递归一定要有出口,即是让方法停止的机制,否则就会出现内存溢出
案例
递归求和
//需求:利用递归求1~100之间的和
//分析:大问题解析成小问题
//1~100的和 = 100 + (1~99的和)
//1~99的和 = 99 + (1~98的和)
//1~98的和 = 98 + (1~97的和)
//1~97的和 = 97 + (1~96的和)
// ........
//1~2的和 = 2 + (1~1的和)
//1~1的和 = 1 (方法出口)
System.out.println(getSum(100)); //5050
//递归求和
public static int getSum(int number) {
if (number == 1) return 1;//出口
return number + getSum(number - 1);
}
递归求阶乘
//需求:利用递归求5的阶乘 5! = 5*4*3*2*1
//分析:大问题拆分小问题
// 5! = 5 * 4!
// 4! = 4 * 3!
// 3! = 3 * 2!
// 2! = 2 * 1!
// 1! = 1 (方法出口)
System.out.println(getProduct(5)); //120
//递归求阶乘
public static int getProduct(int number) {
if (number == 1) return 1;
return number * getProduct(number - 1);
}