Java递归所有上级
简介
在Java编程中,递归是一种常用的技术,用于解决问题或实现特定功能。递归是指在解决问题的过程中,调用自身来实现更小规模的问题,直到达到终止条件。在本篇文章中,我们将介绍如何使用递归来查找一个人的所有上级。
问题描述
假设我们有一个员工信息的数据结构,包含员工的ID和上级的ID。我们想要写一个方法,通过给定一个员工ID,找到该员工的所有上级。这个问题可以使用递归来解决。
解决方案
我们可以使用面向对象的思想来解决这个问题。首先,我们定义一个Employee
类,包含员工的ID和上级的ID。
class Employee {
int id;
int supervisorId;
public Employee(int id, int supervisorId) {
this.id = id;
this.supervisorId = supervisorId;
}
}
接下来,我们定义一个Company
类,用于管理员工信息。我们在Company
类中实现一个递归方法findSupervisors
,该方法用于查找给定员工的所有上级。
import java.util.ArrayList;
import java.util.List;
class Company {
List<Employee> employees;
public Company() {
employees = new ArrayList<>();
}
public void addEmployee(Employee employee) {
employees.add(employee);
}
public List<Integer> findSupervisors(int employeeId) {
List<Integer> supervisors = new ArrayList<>();
for (Employee employee : employees) {
if (employee.id == employeeId) {
int supervisorId = employee.supervisorId;
if (supervisorId != 0) {
supervisors.add(supervisorId);
supervisors.addAll(findSupervisors(supervisorId));
}
break;
}
}
return supervisors;
}
}
在findSupervisors
方法中,我们首先遍历所有员工,找到与给定员工ID相匹配的员工。如果找到了匹配的员工,我们获取该员工的上级ID,并检查上级ID是否为0。如果上级ID不为0,我们将上级ID添加到上级列表中,并递归调用findSupervisors
方法来继续查找上级的上级。
示例
下面是一个使用上述类的示例:
public class Main {
public static void main(String[] args) {
Company company = new Company();
Employee employee1 = new Employee(1, 0);
Employee employee2 = new Employee(2, 1);
Employee employee3 = new Employee(3, 2);
company.addEmployee(employee1);
company.addEmployee(employee2);
company.addEmployee(employee3);
int employeeId = 3;
List<Integer> supervisors = company.findSupervisors(employeeId);
System.out.println("Supervisors of employee " + employeeId + ": " + supervisors);
}
}
运行以上代码,输出结果为:
Supervisors of employee 3: [2, 1]
在上面的示例中,我们创建了一个公司对象,并添加了三个员工。然后,我们指定员工ID为3,调用findSupervisors
方法来查找员工3的所有上级。最终,我们打印出员工3的所有上级ID。
总结
递归是一种强大的编程技术,可以用于解决许多问题,包括查找一个人的所有上级。在本文中,我们介绍了如何使用递归来实现这个功能,并给出了相应的Java代码示例。希望本文对你理解递归的原理和应用有所帮助。
附录
pie
title 上级人数
"员工1" : 1
"员工2" : 1
"员工3" : 0.5
journey
title 查找员工3的上级
section 初始化
"员工1" --> "员工2" --> "员工3"
section 递归查找
"员工3" --> "员工2" --> "员工1"