当前位置: 首页 > 知识库问答 >
问题:

递归函数返回问题

谭鹏云
2023-03-14

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

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

此函数用于接收员工并查找其管理者。如果找到管理器,则将管理器id推送到数组中($)-

所以我的问题是,如果我不在第6行返回递归调用(这是-

共有2个答案

汪建德
2023-03-14

不,写空报税表绝对没有好处。无论返回值是否存在,该方法都将停止。

请遵守以下两种方法,无论返回结果如何,这两种方法都显示出相同的、无错误的结果。

代码:(演示)

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
            ]
        ]
    ]
);

输出:

array (
  0 => 2,
  1 => 1,
)
---
array (
)
---
array (
  0 => 2,
  1 => 1,
)
燕元明
2023-03-14

不确定这是否是你所想的,但它是有效的。


function getManagers($employee)
{
  $managers = [];
  if (isset($employee->manager)) {
    array_push($managers, $employee->manager->id);
    array_push($managers, ...getManagers($employee->manager));
  }
  return $managers;
}

 类似资料:
  • 我有一个递归函数,它会重复这个函数,直到不满足if条件,然后输出一个整数。但是,此函数之外需要整数的函数正在接收一个单位。我应该如何修改代码以返回int? 这就是整个程序 }

  • 问题内容: 我有一个计算税金的函数。 我不明白为什么它不能停止递归。 问题答案: 在您的职能部门中: 您没有从函数或设置中返回值。当您不返回任何内容时,返回值为。 也许,您想要这样:

  • 问题内容: 我编写了以下函数,以实现自己的二进制搜索 我知道我的实现已经关闭,但是我对理解递归堆栈更加好奇。 当我调用时,我的函数应返回的值 但相反,它返回None。此外,当我直接调用时 ,我得到的正确值为0。这怎么可能? 问题答案: 您将忽略递归调用的返回值。您还需要 显式地 返回它们: 递归调用与其他任何函数调用一样;他们将结果返回给调用者。如果忽略返回值,然后调用函数结束,那么您将以该调用函

  • 我目前正在编码一个二叉查找树,目前正在尝试实现一个递归函数来确定二叉树中是否存在一个节点。 这是节点类: 所讨论的函数是Exists函数。这是在BST的根节点上调用的,就像这样:

  • 我想写返回true的Python函数一个字符串s是回文,也就是等于它的反。例如,“赛车”和“abba”是回文。到目前为止,这是我不成功的尝试。 当我告诉我的函数返回相反的结果时,我没有问题,但是,我不知道应该如何进行比较才能返回一个布尔值。 使用上面的函数会产生以下错误 现在我完全理解为什么会产生上述错误。这是因为一些递归函数返回一个boool并尝试将其添加到字符串中;但是我做不到的是如何避免这个

  • 我正在尝试创建一个递归函数,该函数将生成项的嵌套结构。此文件中的每个项都有一个指向其子项的指针和一个停止值,如您可以在下面看到的: 这个递归函数应该获得一个开始索引,它将根据该索引构建树,并返回一个嵌套的字典,如下所示: