【问题标题】:What type of recursion is being depicted here?这里描述的是什么类型的递归?
【发布时间】:2021-01-07 10:24:56
【问题描述】:

考虑以下 PHP 代码:

function awesome(array $array): void {
    foreach ($array as $a) {
            if (!is_string($a)) {
                    awesome($a);
            }
    }
}

awesome(array('a' => array('abc'), 'b' => array('def'), 'c' => array('ghi')));

这里描述的是什么类型的递归?

我理解线性递归是一种递归,其中递归函数只被调用一次。在这种情况下,递归函数被调用一次,但是函数调用在一个迭代循环中。

当然,这里发生的是线性递归,而不是其他类型的递归。

【问题讨论】:

  • 您到底在寻找什么?
  • @A.Gille 只是这里使用的递归的名称/类型......您是否知道这是线性递归的示例还是这里发生的另一种类型的递归?按英文单词输入,而不是按用户定义的类型输入。
  • 这不是线性递归,因为每次递归可以有多个递归调用。我相信它被称为“多重递归”。
  • @A.Gille awesome() 在每次迭代中只被调用一次......所以我很确定这不是“多重递归”的例子
  • @A.Gille 同样,awesome() 被水平(或连续)多次调用,而不是在同一次迭代中

标签: php recursion computer-science


【解决方案1】:

这是嵌套递归,因为根函数的调用取决于条件。其他人在说多次递归,但这是不正确的,因为多次递归每次都暗示了不同的 $a 值。

【讨论】:

  • 有人告诉我这实际上是树递归。这是正确的还是实际上是嵌套递归。
  • @SvzPkxBOjxO 是的,它是树递归。树递归是每次调用函数时值都会发生变化的地方。
  • 为什么一开始称它为嵌套递归?这只是猜测吗?
猜你喜欢
  • 1970-01-01
  • 2013-01-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多