2014-01-27 143 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