Я пишу текстовый тег парсера, и в настоящее время я использую этот рекурсивный метод для создания тегов n слов. Есть ли способ сделать это нерекурсивно или, по крайней мере, оптимизировать? Предположим, что $ this-> dataArray может быть очень большим массивом.Оптимизация рекурсивного метода в PHP
/**
* A recursive function to add phrases to the tagTracker array
* @param string $data
* @param int $currentIndex
* @param int $depth
*/
protected function compilePhrase($data, $currentIndex, $depth){
if (!empty($data)){
if ($depth >= $this->phraseStart){
$this->addDataCount($data, $depth);
}
if ($depth < $this->phraseDepth){
$currentIndex = $currentIndex + 1;
//$this->dataArray is an array containing all words in the text
$data .= ' '.$this->dataArray[$currentIndex];
$depth += 1;
$this->compilePhrase($data, $currentIndex, $depth);
}
}
}
Хм. Он работает, если вы добавите else/break для второго вложенного оператора if. Однако он, как представляется, в среднем примерно такой же скорости, как и рекурсивная функция. – VirtuosiMedia
Прохладный, отредактирует. –
Рекурсия хвоста обычно не считается оптимизацией скорости (хотя разматывание стека требует времени, оно должно быть небольшим по сравнению со всеми конкатенациями строк, которые происходят). Это оптимизация пространства, чтобы предотвратить переполнение стека. –