从递归函数返回一个数组

时间:2013-08-06 10:33:18

标签: php recursion return

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

这是我的功能:

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工作,返回也不会让我回到我的数组。 该功能是否需要一些优化?

1 个答案:

答案 0 :(得分:0)

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

递归并不特别,真的。你调用一个函数,得到一个结果:

$winners = tas();

简单。在内部,这些函数可以调用其他函数:

function tas() {
    return foo();
}

tas无法自行调用,但它仍然受到返回数据的相同规则的约束:

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

只需在上面的示例中用foo()替换tas()相同的概念,但包括递归。