1.递归的概述
- 生活中的递归: 放羊–赚钱–盖房子–娶媳妇–生娃–放羊–赚钱–盖房子–娶媳妇–生娃–放羊…
- 程序中的递归: 指在当前方法内调用自己的这种现象。
- 递归的注意事项:
- 递归要有出口(结束方法),否则会报栈内存溢出错误StackOverflowError
- 递归的出口不能太晚了
案例演示
package com.itheima.demo5_各种流.demo2_递归;
import java.lang.reflect.Method;
public class test {
static int count = 0;
public static void main(String[] args) {
/*
递归:
概述:方法自己调用自己
注意:
1.递归一定要有出口,否则会报栈内存溢出错误StackOverflowError
2.递归的出口不能太晚,太晚了依然会报栈内存溢出错误StackOverflowError
4.合理递归才行
*/
method();
}
public static void method(){
System.out.println("开始"); // 开始 1 开始3
count++;
if (count == 5){
//结束方法
return;
}
method(); //开始2
System.out.println("结束"); //结束1
}
}
结果
开始
开始
开始
开始
开始
结束
结束
结束
结束
2.递归累和
需求
- 定义一个方法,计算1 ~ n的累加和
分析
- num的累加和 = num + (num-1)的累和,所以可以把累加和的操作定义成一个方法,递归调用。
实现
代码实现
package com.itheima.demo5_各种流.demo2_递归;
public class test2 {
public static void main(String[] args) {
/*
练习一:使用递归计算1 ~ n的和
分析:
1 的累加和 = 1 1的累加和=1
2 的累加和 = 1 + 2 2的累加和=2+1的累加和
3 的累加和 = 1 + 2 + 3 3的累加和=3+2的累加和
4 的累加和 = 1 + 2 + 3 + 4 4的累加和=4+3的累加和
.....
n 的累加和 n的累加和=n+(n-1)的累加和
*/
// 调用getSum方法计算5的累加和
int sum =getsum(5);
System.out.println(sum);
}
public static int getsum(int n){
if (n==1){
return 1;
}
return n+getsum(n-1);
}
}
结果
15
3.递归求阶乘
需求
- 计算n的阶乘
分析
-
阶乘:所有小于及等于该数的正整数的积。
n的阶乘:n! = n * (n-1) … 3 * 2 * 1
n的阶乘 = n * (n1)的阶乘,所以可以把阶乘的操作定义成一个方法,递归调用。
- 推理得出:n! = n * (n-1)!
实现
代码实现:
package com.itheima.demo5_各种流.demo2_递归;
public class test3 {
public static void main(String[] args) {
System.out.println(jiechneg(4));
}
//写阶乘方法
// n*(n-1)
//一直调用n-1就可
public static int jiechneg(int n){
if (n==1){
return 1;
}
return n*jiechneg(n-1);
}
}
结果 24