Maison > développement back-end > tutoriel php > Exemples de trois méthodes pour implémenter la récursivité en PHP

Exemples de trois méthodes pour implémenter la récursivité en PHP

伊谢尔伦
Libérer: 2023-03-07 18:50:01
original
4191 Les gens l'ont consulté

Les fonctions récursives sont souvent utilisées par tout le monde. Elles s'appellent directement ou indirectement dans le corps de la fonction. Les conditions doivent être déterminées avant de s'appeler, sinon les appels continueront indéfiniment. Dans le chapitre précédent, qu'est-ce que la fonction récursive php et un exemple simple est présenté pour illustrer . Dans cette section, nous présenterons plusieurs façons d'implémenter des fonctions récursives en PHP. Trois méthodes de base sont répertoriées ici. Le comprendre nécessite un certain niveau de connaissances de base, notamment une compréhension des variables globales, des références et des variables statiques, ainsi qu'une compréhension de leur portée. Les fonctions récursives sont également une bonne technique pour résoudre des niveaux infinis de classification.

1. Utiliser des références comme paramètres

Les références signifient simplement que deux variables avec des noms différents pointent vers la même adresse de stockage. À l'origine, chaque variable avait sa propre adresse de stockage, et l'affectation et la suppression se déroulaient selon leur propre chemin. Désormais, deux variables doivent partager une adresse de stockage. $a=&$b; . Cela signifie en réalité que $a doit partager une pièce avec $b quelle que soit son adresse de stockage d'origine. Par conséquent, toute modification de la valeur de l'adresse stockée affectera les deux valeurs. ​

Les fonctions font à l'origine leur propre travail, même s'il s'agit de fonctions portant le même nom. Les fonctions récursives envisagent de prendre des références comme paramètres et de devenir un pont pour former un partage de données entre deux fonctions. Bien que les deux fonctions semblent fonctionner sur des adresses différentes, elles opèrent en réalité sur la même adresse mémoire.

Jetons un coup d'œil à travers un exemple :

<?php
function test($a=0,&$result=array()){
 $a++;
 if ($a<10) {
   $result[]=$a;
   test($a,$result);
 }
 echo $a;
 return $result;
}
test();
?>
Copier après la connexion

L'exemple ci-dessus est très simple. Prenez a<10 comme condition de jugement. est vrai, puis attribuez à Pass la référence du résultat à result[]; et le a généré par chaque récursion sera ajouté au tableau de résultats result. Par conséquent, le tableau $result généré dans cet exemple est Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 [4] => 5 [ 5] => 6 [6] => 7 [7] => 8 [8] =>

Ce qui est plus intéressant dans cet exemple, c'est la valeur de echo $a. Je crois que beaucoup de gens pensent que c'est 12345678910, mais ce n'est pas le cas. C'est

1098765432. Pourquoi? Parce que la fonction n'a pas exécuté la récursion de fonction suivante avant echo $a. L'exécution réelle de echo $a se produit lorsque la condition a<10 n'est pas remplie, echo $a renvoie le résultat pour la couche supérieure, après l'exécution de la fonction récursive, l'écho $a de cette couche commence à être exécuté, et ainsi de suite. .

2. Utilisez des variables globales

Utilisez des variables globales pour compléter les fonctions récursives en premier. La variable globale déclarée dans la fonction n'est qu'une référence à la variable externe du même nom. La portée de la variable est toujours dans la portée de cette fonction. Changer les valeurs de ces variables modifiera naturellement les valeurs des variables externes du même nom. Mais une fois

& utilisé, la variable du même nom ne sera plus une référence du même nom.

Ce qui suit est un exemple :

<?php
function test($a=0,$result=array()){
 global $result;
 $a++;
 if ($a<10) {
   $result[]=$a;
   test($a,$result);
 }
 return $result;
}
?>
Copier après la connexion

3. Utiliser des variables statiques

Ici, nous utilisons

static dans la classe, et aujourd'hui nous l'utilisons dans la fonction récursive. N'oubliez pas le rôle du statique : initialisez la variable uniquement la première fois que la fonction est appelée et conservez la valeur de la variable.

Ce qui suit utilise un exemple pour illustrer :

<?php
function test(){
 static $count=0;
 echo $count;
 $count++;
}
test();
test();
test();
test();
test();
?>
Copier après la connexion
Explication : Quel est le résultat de l'exécution de ce morceau de code ? Vous pensez peut-être que c'est

00000, mais la réponse est bien sûr non. Le résultat de sortie est 01234. Premièrement, lorsque vous appelez test() pour la première fois, static initialise $count. Après chaque exécution, la valeur de $count sera conservée et ne sera pas réinitialisée. Cela équivaut à ignorer directement la phrase static $count=0. ;. Ainsi, l'effet de l'application de statique à une fonction récursive peut être imaginé. Les variables qui doivent être utilisées comme « ponts » entre les fonctions récursives sont initialisées en utilisant statique, et la valeur des « variables de pont » sera conservée pour chaque récursion.

Résumé

La fonction dite récursive se concentre sur la façon de gérer l'appel de fonction lui-même et sur la façon de garantir que les résultats requis peuvent être raisonnablement "transmis " entre les fonctions. Ce qui précède sont les trois méthodes de base pour implémenter la récursivité en PHP. Les amis peuvent essayer différents codes par eux-mêmes afin de mieux maîtriser ces méthodes et de jeter une bonne base pour l'apprentissage et le développement futurs.

【Tutoriels associés recommandés】

1. "

php.cn Dugu Jiujian (4) - Tutoriel vidéo PHP "

2. Un ensemble complet de tutoriels vidéo sur la programmation PHP de l'entrée au master


3

Tutoriels vidéo pratiques PHP

.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal