我错过了什么吗?在尝试实现算法时,我无法获得函数的返回值。最初尝试返回一个我遇到过简单类型的数组也不行。
注意:这是一个简化版本来说明这一点。我知道对于插图代码,可以使用类似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
我也尝试将值赋给变量(函数外部)无效。
有什么想法吗? : - )
答案 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);