2016-03-02 196 views
1

我错过了什么吗?在试图实现一个算法时,我无法获得函数的返回值。最初试图返回一个数组我遇到简单的类型不会工作。PHP递归函数不返回值

注意:这是一个简化版本来说明这一点。我知道对于图示的代码,可以使用类似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"); 

获得无结果

(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 

我也试着值赋值给一个变量(函数之外的)到徒劳无功。

任何想法? :-)

+2

您应该'在递归函数return'值。 'return recursive1(array_slice($ myArray,1),$ accumulator + 1);' –

+0

谢谢大家。回到业务。 –

回答

2

你应该有这样的:

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

没有return声明,永远不会回到你的最终结果。

2

你错过了return声明,所以你的函数没有在递归分支中返回任何东西。改变这一行:

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

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

您需要添加return到您的递归调用:

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