PHP递归函数不返回值

时间:2016-03-02 00:25:07

标签: php function recursion

我错过了什么吗?在尝试实现算法时,我无法获得函数的返回值。最初尝试返回一个我遇到过简单类型的数组也不行。

注意:这是一个简化版本来说明这一点。我知道对于插图代码,可以使用类似print_r(array_map(function($ x){return $ x + 2;},array(2,4,6,8)));但这不会完全解决问题。

对于这个问题。我有以下代码:

function recursive1($myArray, $accumulator){
  if(empty($myArray)){
    return $accumulator;
  } else {
    recursive1(array_slice($myArray, 1), $accumulator+1);
  }
}
$testArray = array(3, 5, 7, 9);
print("->".recursive1($testArray,10)."<-\n");

结果为nil

(output)
-><-

添加一点以查看我的内部

function recursive1($myArray, $accumulator){
  if(empty($myArray)){
    print("[".$accumulator."]\n");   // End result
    return $accumulator;
  } else {
    print("<".$accumulator.">");   // partial results
    recursive1(array_slice($myArray, 1), $accumulator+1);
  }
}
$testArray = array(3, 5, 7, 9);
print("->".recursive1($testArray,10)."<-\n");

我得到的功能是它正在做的事情,但返回值丢失了。

(output)
<10><11><12><13>[14]
-><-

所以我应该

(output)
->14<-

顺便说一句,我正在使用

>php -version
PHP 5.5.30 (cli) (built: Oct 23 2015 17:21:45)
Copyright (c) 1997-2015 The PHP Group
Zend Engine v2.5.0 Copyright (c) 1998-2015 Zend Technologies

我也尝试将值赋给变量(函数外部)无效。

有什么想法吗? : - )

3 个答案:

答案 0 :(得分:2)

你应该有这个:

else {
   print("<".$accumulator.">");   // partial results
   return recursive1(array_slice($myArray, 1), $accumulator+1);
}

如果没有return语句,则永远不会返回最终结果。

答案 1 :(得分:2)

您错过了return语句,因此您的函数在递归分支中不返回任何内容。改变这一行:

recursive1(array_slice($myArray, 1), $accumulator+1);

return recursive1(array_slice($myArray, 1), $accumulator+1);    

答案 2 :(得分:1)

您需要在递归调用中添加return

return recursive1(array_slice($myArray, 1), $accumulator + 1);