2016-03-02 5 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"); 

Getting ноль в результате

(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); 
Смежные вопросы