J'écris un analyseur de balises de texte et j'utilise actuellement cette méthode récursive pour créer des balises de n mots. Existe-t-il un moyen de le faire de manière non récursive ou au moins d'être optimisé? Supposons que $ this-> dataArray peut être un très grand tableau.Optimisation d'une méthode récursive En 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);
}
}
}
Hmm. Cela fonctionne si vous ajoutez un else/break pour la seconde instruction if imbriquée. Cependant, il semble en moyenne à peu près la même vitesse que la fonction récursive. – VirtuosiMedia
Cool, va éditer. –
La récursivité de la queue n'est généralement pas considérée comme une optimisation de la vitesse (bien que le déroulement de la pile prenne du temps, il doit être faible par rapport à l'ensemble de la concaténation de chaîne en cours). C'est une optimisation de l'espace pour vous empêcher de déborder la pile. –