【问题标题】:return an array from a recursive function从递归函数返回一个数组
【发布时间】:2013-08-07 07:34:11
【问题描述】:

我想我需要一些关于递归的解释...我在论坛上查看了一些相同的问题,但对我没有多大帮助。

这是我的功能:

public function tas ($nb_gift, array $winners)
{
    if ( !empty( $nb_gift ) ){
        $id_winner = rand( 10, 15 );
        if ( !$this->_in_array_r($id_winner, $winners) ){
            $existing_user = $this->getWinner( $id_winner );    
        }
        if( !empty( $existing_user ) && $nb_gift > 0 ){
            $winners[] = array( $existing_user, 'iphone5');
            $this->tas($nb_gift - 1, $winners);
        }
        else {
            if($nb_gift > 0)
            {
                $this->tas($nb_gift, $winners);
            }
        }
    } 
    else {
        //print_r($winners);
        return $winners;
    }
}

最后我有一个由获胜者组成的数组。即使 print_r 有效,返回也不会给我我的数组。 该功能是否需要一些优化?

【问题讨论】:

    标签: php recursion return


    【解决方案1】:

    你永远不会从第一个 if 分支返回任何东西。如果您最初调用 tas() 并且它进入第一个 if 分支,它永远不会 returns,因此调用者永远不会得到任何回报。

    递归并没有什么特别之处,真的。你调用一个函数,你会得到一个结果:

    $winners = tas();
    

    简单。在内部,函数可能会调用其他函数:

    function tas() {
        return foo();
    }
    

    没有限制tas不能调用自己,但它仍然受相同的返回数据规则的约束:

    function tas() {
        if (...) {
            foo(); // <-- doesn't return anything
        } else {
            return foo();
        }
    }
    

    只需将上面示例中的foo() 替换为tas() 即可获得相同的概念,但包括递归。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-02
      • 1970-01-01
      • 2016-01-24
      • 2019-04-25
      • 2019-01-12
      • 2020-04-08
      • 1970-01-01
      • 2014-05-01
      相关资源
      最近更新 更多