0

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

这是我的功能:

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

4

1 回答 1

0

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

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

$winners = tas();

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

function tas() {
    return foo();
}

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

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

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

于 2013-08-06T10:43:53.297 回答