1,递归的定义
递归就是有来有回,自己调用自己,遇到终止条件逐层返回结果。
2,递归的三要素
2.1,明确终止条件
2.2,给出递归终止时的解决方案
2.3,提取重复的逻辑,缩小规模
3,递归问题实例
3.1 用递归实现介乘
//实现介乘:5!=1*2*3*4*5
//推导公式:5!= (5-1)!*5 --> n! = (n-1)! *n
public int diGui(int n) {
if (n == 0) {
return 1;
}
return diGui(n - 1) * n;
}
/*
递归中的参数传递:
diGui(4)
diGui(3)* 4
diGui(2)* 3 * 4
diGui(1)* 2 * 3 * 4
diGui(0)* 1 * 2 * 3 * 4
1* * 1 * 2 * 3 * 4
递归中的值的回归:
1 * 2 * 3 * 4
2 * 3 * 4
6 * 4
24
*/
3.2 用递归求最大公约数
//求2个数的最大公约数: 319,377
public int gongYue(int num1, int num2) {
int max = Math.max(num1, num2);
int min = Math.min(num1, num2);
int yuShu = max % min;
if (yuShu == 0) {
return min;
}
return gongYue(min, yuShu);
}
//循环
public int gongYue2(int num1, int num2) {
int max = Math.max(num1, num2);
int min = Math.min(num1, num2);
int yuShu = max % min;
while (yuShu != 0) {
max = Math.max(min, yuShu);
min = Math.min(min, yuShu);
yuShu = max % min;
}
return min;
}
//循环2
public int gongYue3(int num1, int num2) {
int result = 0;
int temp = num2;
while (true) {
if (num1 % num2 == 0) {
result = num2;
break;
}
num2 = num1 % num2;
num1 = temp;
}
return result;
}
参考链接:https://blog.csdn.net/weixin_43025071/article/details/89149695