首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >递归函数返回问题

递归函数返回问题
EN

Stack Overflow用户
提问于 2020-05-22 10:34:48
回答 2查看 45关注 0票数 0

我正在编写一个递归函数,如下所示:

代码语言:javascript
复制
 private function getManager($employee)
 {
     $manager = $employee->manager;
     if ($manager) {
         array_push($this->managers, $manager->id);
         $this->getManager($manager);
     }
     return;
 }

此功能接收员工并找到他的管理人员。如果找到一个manage,那么将管理器id推到第5行的数组中)。然后递归调用此函数,并以员工身份传递经理。如果在第3行没有找到管理器,那么这个函数就返回(第8行)。

所以我的问题是,如果我不返回第6行($this->getManager($manager);)中的递归调用,它们是否有问题?

EN

回答 2

Stack Overflow用户

发布于 2020-05-22 10:57:53

不知道这是不是你想的,但它有效。

代码语言:javascript
复制
function getManagers($employee)
{
  $managers = [];
  if (isset($employee->manager)) {
    array_push($managers, $employee->manager->id);
    array_push($managers, ...getManagers($employee->manager));
  }
  return $managers;
}
票数 0
EN

Stack Overflow用户

发布于 2022-05-21 22:42:04

不,写空的报税单绝对没有好处。不管return是否存在,该方法都将停止。

请观察以下两种方法,它们显示相同的、无错误的结果,而不管返回的结果如何。

代码:(演示)

代码语言:javascript
复制
class Management
{
    private $managers = [];

    function __construct($managerTree)
    {
        $this->getManager($managerTree);
        var_export($this->managers);

        echo "\n---\n";
        $this->managers = [];
        var_export($this->managers);

        echo "\n---\n";
        $this->getManager2($managerTree);
        var_export($this->managers);
    }

    private function getManager(?object $employee): void
    {
        $manager = $employee->manager;
        if ($manager) {
            array_push($this->managers, $manager->id);
            $this->getManager($manager);
        }
        return;
    }

    private function getManager2(?object $employee): void
    {
        $manager = $employee->manager;
        if ($manager) {
            array_push($this->managers, $manager->id);
            $this->getManager($manager);
        }
    }
}

new Management(
    (object) [
        'id' => 3,
        'manager' => (object) [
            'id' => 2,
            'manager' => (object) [
                'id' => 1,
                'manager' => null
            ]
        ]
    ]
);

输出:

代码语言:javascript
复制
array (
  0 => 2,
  1 => 1,
)
---
array (
)
---
array (
  0 => 2,
  1 => 1,
)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61953051

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档