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 に答える