2017-02-13 403 views
1

之前,我已經得到了下面的遞歸函數:PHP遞歸函數的返回結束

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

當我這樣做var_dump($results)內部函數,我得到了所有的數組結果

但是當我調用該函數從另一個我將只獲得$results數組中的第一個元素。

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

我可能不正確,但我認爲遞歸函數通常使用一個參數?如果每次使用相同的輸入(無),這怎麼能真正遞歸呢? – OptimusCrime

+0

是遞歸的,函數內部的第n次調用必須通過將參數傳遞給參數,或者通過將值返回,例如用'$ 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; 
}