文章目录
☀️前言☀️
递归是一种重要的编程解决问题的方式,本篇文章我将给大家介绍一下Java递归的入门。
👦有缘,才相遇,你好!我是hgway_hxz
❤️热爱Java,希望结识更多的小伙伴一起交流
🎉欢迎大家:👍点赞 💬评论 ⭐收藏 💖关注
✉️如果有任何问题欢迎大家在评论区讨论或者私信我
✏️只要不把自我束缚在心灵的牢笼里,谁也束缚不了你去展翅高飞
1.递归的定义
一个方法在执行过程中调用自身就称为递归。
我们要写递归,首先要存在限制条件,当满足这个限制条件的时候,递归便不再继续,每次递归都会接近这个限制条件,也就是需要我们找到递归的终止条件和递归公式。
-
终止条件:递归不能无限递归执行下去,所以要有一个趋近于终止的条件
-
递归公式:原问题可以拆为同类更容易解决的子问题,原问题拆分成其子问题之后,子问题与原问题有相同的解法
2.递归的练习
2.1递归求n的阶乘
解题思路:
例如
5! = 5 * 4 * 3 * 2 * 1
= 5 * 4!
= 5 * 4 * 3!
= 5 * 4 * 3 *2!
= 5 * 4 * 3 * 2 * 1!
我们可以发现递归公式为n! = n * (n - 1)!,而1!= 1也就是终止条件
代码:
public static int fac(int n) {
if (n == 1) {
return 1;
}
return n * fac(n- 1);
}
public static void main1(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
System.out.println(fac(n));
}
执行图:
2.2 递归求 1 + 2 + 3 + … + 10
解题思路:
10∑1,表示连续自然数1到10的和
10∑1 = 10 + 9∑1
= 10 + 9 + 8∑1
= 10 + 9 + 8 + 7∑1
= 10 + 9 + 8 …… + 1
递推公式:n∑1 = n + n - 1∑1
终止条件: n等于1的时候,1∑1 = 1
代码:
public static int sumAdd(int n) {
if (n == 1) {
return 1;
}
return n + sumAdd(n - 1);
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
System.out.println(sumAdd(n));
}
2.3按顺序打印一个数字的每一位
解题思路:
采用模十除十,例如 1234 打印出 1 2 3 4
1234 % 10 = 4
1234 / 10 = 123
123 % 10 = 3
123 / 10 = 12
12 % 10 = 2
12 / 10 = 1
1 % 10 = 1
如果n(1~9的数字)小于10的时候,n % 10 就会等于n本身,这就是终止条件
递推公式:n = n % 10 + printNum(n / 10)
终止条件:n < 10
代码:
public static void printNum(int n) {
if (n < 10) {
System.out.print(n + " ");
;
} else {
printNum(n / 10);
System.out.print(n % 10 + " ");
}
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
printNum(n);
}
2.4输入一个非负整数,返回组成它的数字之和
解题思路:
写一个递归方法,输入一个非负整数,返回组成它的数字之和. 例如,输入 1234, 则应该返回1 + 2 + 3 +4, 它的和是10
1234 % 10 = 4
1234 / 10 = 123
123 % 10 = 3
123 / 10 = 12
12 % 10 = 2
12 / 10 = 1
1 % 10 = 1
如果n(1~9的数字)小于10的时候,n % 10 就会等于n本身,这就是终止条件
递推公式:n % 10 + numAdd(n / 10)
终止条件:n < 10
代码:
public static int numAdd(int n) {
if (n < 10) {
return n;
} else {
return n % 10 + numAdd(n / 10);
}
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
System.out.println(numAdd(n));
}