目录
1 .递归概述
方法定义中调用方法本身的现象,称做递归。
使用注意:
- 构造方法不能递归使用。
- 要定义结束条件,否则就是无限循环调用。
- 要避免内存溢出,递归深度容易造成内存溢出。
2 .案例演示
2.1 求5的阶乘
数学过程演示:
n! =n*((n-1)*((n-1-1)*((n-1-1-1)*…………)))
5! =5*((5-1)*((5-1-1)*((5-1-1-1)*(5-1-1-1-1))))
代码实现 :
public class Test {
public static void main(String[] args) {
//定义初始变量求5的阶乘
int n = 5;
int s = m(n);
System.out.println(s);
}
//定义一个带返回值的方法
private static int m(int n) {
//n大于1,则继续递归调用自身
if (n > 1) {
return n * m(n - 1);
} else {
//n小于等于1,结束递归
return 1;
}
}
2.2 键盘录入求第n项斐波那契数列的值
tip:斐波那契数列指的是这样一个数列:1,1,2,3,5,8,13,21,34,55,89...即这个数列从第3项开始,每一项都等于前两项之和。具体这个数列在现实生活中有哪些作用这里就不赘了。
代码实现 :
import java.util.Scanner;
public class Test25 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("输入一个整数");
/**
* n(序号) 1 2 3 4 5 6 7 8....n
* s(数列对应值) 1 1 2 3 5 8 13 21...s
*/
int n = sc.nextInt();
int s = m(n);
System.out.println("对应数列值:" + s);
}
//定义一个带返回值的方法
private static int m(int n) {
//剔出序号一二号返回1
if (n == 1) {
return 1;
}
if (n == 2) {
return 1;
}
return m(n - 1) + m(n - 2);
}
}
2.3 求1+2+3+…num的和
代码实现:
public class Test27 {
public static void main(String[] args) {
//定义整数6为num初始值
int num = 6;
int sum = m(num);
System.out.println(sum);
}
//定义一个带返回值的方法
private static int m(int num) {
//num大于1,继续递归调用
if (num > 1) {
return num + m(num - 1);
} else {
//num小于等于1,返回1
return 1;
}
}
}
3.作者寄语
Java递归的用处还有很多,望诸位明君在最美的年纪遇见代码,更上一层楼!共勉 !