2017-02-13 26 views
1

前に、私は、次の再帰関数持っている:私は、関数の内部var_dump($results)を行う際PHP再帰関数の戻り値は、最後

private function myRecursiveFunction() 
{ 
    $results = []; 
    //stuff related to $results 
    ... 
    if(!$done){ 
    ..... 
    $this->myRecursiveFunction(); 
    } 
    return $results; 
} 

を私はすべての配列は

をもたらしましたが、私は別のものから関数を呼び出すときに私$results配列の最初の要素だけを取得します。

public function myFunction() 
{ 
$results = $this->myRecursiveFunction(); 
} 
+2

私は間違っているかもしれませんが、再帰関数は通常パラメータを使用すると考えましたか?毎回同じ入力(なし)を使用すると、これは本当に再帰的になりますか? – OptimusCrime

+0

を再帰的に呼び出すには、関数内のn番目の呼び出しで、元の '$ result'を参照によってパラメータを渡すか、値を取得するか、' $ result [] = $ this-> myRecursiveFunction ); ' – Kaddath

答えて

4

、結果が途中でお互いに「追加」されている、私はあなたがここに達成したいものを100%確実ではないけど、再帰関数は通常、すべての道最も内側の関数に彼らの「ワークロード」を送信バック。これが本当に必要な場合は、コードを次のように変更する必要があります。

private function myRecursiveFunction() 
{ 
    $results = []; 
    //stuff related to $results 
    ... 
    if(!$done){ 
    ..... 
    // Add the computed results of the recursive call to our data stack 
    $results[] = $this->myRecursiveFunction(); 
    } 
    // Return the entire result array 
    return $results; 
} 
関連する問題