定义:
是一种函数调用自身的操作。
递归被用于处理包含有更小的子问题的一类问题。
一个递归函数可以接受两个输入参数:一个最终状态(终止递归)或一个递归状态(继续递归)。
代码
import java.util.Scanner;
public class Recursion {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("请输入一个整数: ");
int n = scanner.nextInt();
int sum = sum(n); // 求1到用户输入的整数的和
System.out.println("1 + 2 + 3 + ... + " + n + " = " + sum);
scanner.close(); // 关闭Scanner对象
}
private static int sum(int i) {
return (i == 1) ? 1 : i + sum(i - 1);
}
}
运行截图
解释:
-
Scanner scanner = new Scanner(System.in);
:创建一个Scanner
对象来从标准输入(通常是键盘)读取数据。 -
System.out.print("请输入一个整数: ");
:向用户打印提示信息,要求输入一个整数。 -
int n = scanner.nextInt();
:从用户那里读取一个整数并将其存储在变量n
中。 -
int sum = sum(n);
:调用sum
方法来计算从1到n
的所有整数之和,并将结果存储在变量sum
中。 -
System.out.println("1 + 2 + 3 + ... + " + n + " = " + sum);
:打印出1到n
的所有整数的和。 -
scanner.close();
:关闭Scanner
对象,这是一个好习惯,以避免潜在的资源泄露。 -
private static int sum(int i) {
:定义了一个私有静态方法sum
,它接受一个整数参数i
。 -
return (i == 1) ? 1 : i + sum(i - 1);
:这是递归的关键部分。如果i
等于1,方法返回1(递归的基本情况)。否则,方法返回i
加上对sum(i - 1)
的调用的结果(递归的步骤)。这样,它递归地将i
从n
减少到1,并计算所有这些值的和。
扩展:
java三元表达式讲解:
Java中的三元运算符是一种简洁的方式来进行条件判断,其基本形式如下:
variable = Expression1 ? Expression2 : Expression3;
这里的 Expression1
是一个条件表达式,它的结果必须是布尔值(即 true
或 false
)。Expression2
和 Expression3
可以是任何类型的表达式,但它们的类型必须相同,或者能够被晋升到一个共同的类型。
三元运算符的工作原理如下:
- 如果
Expression1
的结果为true
,则整个三元表达式的结果为Expression2
的值。 - 如果
Expression1
的结果为false
,则整个三元表达式的结果为Expression3
的值。
示例:
public class TernaryExpressionExample {
public static void main(String[] args) {
TernaryExpressionExample example = new TernaryExpressionExample();
int num1 = 5;
int num2 = 10;
int max = example.getMaxValue(num1, num2);
System.out.println("较大的数是:" + max);
}
// 使用三元表达式在方法中比较两个数并返回较大的数
public int getMaxValue(int a, int b) {
return (a > b) ? a : b;
}
}
运行截图:
解释:
-
TernaryExpressionExample example = new TernaryExpressionExample();
:这行代码创建了一个TernaryExpressionExample
类的实例对象,命名为example
。这个对象用于访问类中的方法和属性。 -
int num1 = 5;
和int num2 = 10;
:这两行代码声明并初始化了两个整数变量num1
和num2
,分别赋值为5和10。 -
int max = example.getMaxValue(num1, num2);
:这行代码调用了example
对象的getMaxValue
方法,将num1
和num2
作为参数传递给这个方法,并将返回值赋给了max
变量。这个方法使用三元表达式来比较a
和b
的大小,然后返回较大的数。 -
System.out.println("较大的数是:" + max);
:这行代码使用System.out.println
方法将字符串 "较大的数是:" 和max
的值打印到控制台。 -
public int getMaxValue(int a, int b) {
:这是一个方法的定义,名为getMaxValue
,它接受两个整数参数a
和b
。 -
return (a > b) ? a : b;
:在getMaxValue
方法中,使用了三元表达式来比较a
和b
的大小。如果a
大于b
,则返回a
,否则返回b
。
注意事项:
三元运算符常用于简化代码,特别是在需要基于条件为变量赋值的情况下。不过,应该注意的是,过度使用三元运算符可能会使代码难以阅读和维护,特别是当嵌套多个三元运算符时。在这种情况下,使用传统的 if-else
语句可能是更好的选择。