✈【【零基础 快速学Java】韩顺平 零基础30天学会Java】
递归就是方法自己调用自己,每次调用时传入不同的变量.递归有助于编程者解决复杂问题,同时可以让代码变
得简洁
【打印问题】
/**
* ClassName: T
* date: 2022/9/2 16:23
*
* @author DingJiaxiong
*/
class T {
public void test(int n){
if (n > 2){
test(n - 1);
}
System.out.println("n = " + n);
}
}
/**
* ClassName: Recursion01
* date: 2022/9/2 16:22
*
* @author DingJiaxiong
*/
public class Recursion01 {
public static void main(String[] args) {
T t1 = new T();
t1.test(4);
}
}
运行结果

这很好理解
初始进入方法 n =4 ,n > 2成立,立马执行test(3)
n = 3,n > 2成立,立马执行 test(2),
n = 2,n > 2不成立,输出2
输出3
输出4

【阶乘问题】
public int factorial(int n){
if (n == 1){
return 1;
}
else{
return factorial(n - 1) * n;
}
}
调用结果

调用过程
韩老师的图解:

经典斐波那契:
public int fibonacci(int n){
if (n >= 1){
if (n == 1 || n == 2){
return 1;
}
else{
return fibonacci(n - 1) + fibonacci(n - 2);
}
}
else{
System.out.println("要求输入的n >= 1的整数");
return -1;
}
}
调用
/**
* ClassName: RecursionExercise01
* date: 2022/9/2 16:35
*
* @author DingJiaxiong
*/
public class RecursionExercise01 {
public static void main(String[] args) {
T t1 = new T();
int n = 7;
System.out.println("n=" + n + "时,对应的斐波那契数 = " + t1.fibonacci(n));
}
}
运行结果

桃子问题:
/**
* ClassName: T
* date: 2022/9/2 16:23
*
* @author DingJiaxiong
*/
class T {
public void test(int n) {
if (n > 2) {
test(n - 1);
}
System.out.println("n = " + n);
}
public int factorial(int n) {
if (n == 1) {
return 1;
} else {
return factorial(n - 1) * n;
}
}
public int fibonacci(int n) {
if (n >= 1) {
if (n == 1 || n == 2) {
return 1;
} else {
return fibonacci(n - 1) + fibonacci(n - 2);
}
} else {
System.out.println("要求输入的n >= 1的整数");
return -1;
}
}
public int peach(int day) {
if (day == 10) {
return 1;
} else if (day >= 1 && day <= 9) {
return ((peach(day + 1) + 1) * 2);
} else {
System.out.println("day应该是1-10");
return -1;
}
}
}
调用类
/**
* ClassName: RecursionExercise01
* date: 2022/9/2 16:35
*
* @author DingJiaxiong
*/
public class RecursionExercise01 {
public static void main(String[] args) {
T t1 = new T();
int n = 7;
// System.out\.println("n=" + n + "时,对应的斐波那契数 = " + t1.fibonacci(n));
int day = 9;
int peachNum = t1.peach(day);
if (peachNum != -1){
System.out.println("第" + day + "天有" + peachNum + "个桃子");
}
}
}
运行结果
