2014-01-27 200 views
1

我有這個遞歸函數調用自己,直到數字達到總數。我已經使這個演示顯示工作,實際上secondFunc()conatins數據庫查詢。我將值保存在從firstFunc()傳遞給secondFunc()的數組中。問題是當我第一個函數調用時,它只顯示1個值,即1.當我取消第二個函數中的var_dump的註釋時,它顯示了所有的值。我知道我做錯了什麼。請指出我的錯誤。這裏有什麼問題?從函數調用遞歸函數只返回第一個值

function firstFunc($total){  
    $array=array(); 
    $num=0; 
    return secondFunc($total,$num,$array); 
} 



function secondFunc($total,$num,$array){ 
    $num++; 
    $array[$num]=$num; 
    if($num<$total){ 
    secondFunc($total,$num,$array); 
    } 
    //var_dump($array); 
    //exit(); 
    return $array; 

} 

var_dump(firstFunc(5)); 

演示http://codepad.viper-7.com/Bic8ce

回答

5

當你調用一個函數遞歸你必須確保在遞歸調用的返回值傳播回原調用:

if($num<$total) { 
    return secondFunc($total,$num,$array); // return added 
} 
+0

通過使用回烏爾給人值回運作? – Ace

+0

'secondFunc(5,0,$ array)'調用'secondFunc(5,1,$ array)'產生所需的結果 - 然後它必須將結果返回給它自己的調用者。這就是'return'在這裏所做的。 – Jon