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"