Cet article présente principalement les trois méthodes d'implémentation de fonctions récursives en PHP. Les amis intéressés peuvent s'y référer. J'espère qu'il sera utile à tout le monde.
Les fonctions récursives sont un type de fonction relativement courant en programmation. Sa caractéristique est que la fonction elle-même peut s'appeler, mais elle doit être jugée conditionnellement avant de s'appeler, sinon elle provoquera des appels infinis. Cet article répertorie trois méthodes d'implémentation de fonctions récursives. La première utilise des références comme paramètres, la seconde utilise des variables globales et la troisième utilise des variables statiques. La compréhension de ces problèmes nécessite des connaissances de base, notamment la compréhension des variables globales, des références et des variables statiques. Il faut également comprendre leur champ d’action. Plus de bêtises ici, veuillez voir ci-dessous pour une introduction détaillée.
La première méthode : utiliser des références comme paramètres
Que les références soient des paramètres ou non, vous devez d'abord comprendre ce qu'est une référence ? Une référence signifie simplement que deux variables portant 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'accord maintenant, les deux variables partagent une adresse de stockage. $a=&$b; . Ce que cela signifie en réalité, c'est que $a doit partager une chambre 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.
Le code est le suivant :
function test($a=0,&$result=array()){ $a++; if ($a<10) { $result[]=$a; test($a,$result); } echo $a; return $result; }
L'exemple ci-dessus est très simple. Utilisez a<10 comme condition de jugement. Si la condition est vraie, attribuez-la. a à result[] ; Passez la référence du résultat dans la fonction, 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] =>
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 en réalité ce n'est pas le cas, c'est 1098765432. Pourquoi? Parce que la fonction a effectué la récursion de fonction suivante avant d'exécuter echo a.
L'exécution réelle de echo a se produit lorsque a<10 les conditions ne sont pas remplies, echo a, renvoie résultat,Pour la couche supérieure, après avoir exécuté la fonction récursive, commencez à exécuter le echo $a de cette couche, et ainsi de suite.
Deuxième méthode : utilisez des variables globales
Utilisez des variables globales pour compléter des fonctions récursives. Veuillez vous assurer de bien comprendre ce que sont les variables globales . globalDéclarer des variables dans une fonction n'est rien de plus qu'une référence à une 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 n'est plus une référence du même nom. Il n'est pas nécessaire de comprendre un niveau aussi profond pour utiliser des variables globales pour implémenter des fonctions récursives. Vous pouvez comprendre les fonctions récursives naturellement en conservant la vue originale des variables globales.
Le code est le suivant :
function test($a=0,$result=array()){ global $result; $a++; if ($a<10) { $result[]=$a; test($a,$result); } return $result; }
La troisième méthode : utiliser des variables statiques
On voit souvent des static< dans les classes 🎜>, Aujourd'hui nous l'utilisons dans des fonctions récursives. 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.
Par exemple :
Le code est le suivant :function test(){ static $count=0; echo $count; $count++; } test(); test(); test(); test(); test();
00000 ? Certainement pas. Il s’agit du 01234. Tout d'abord, appelez test(), static pour la première fois pour initialiser $count Après chaque exécution, la valeur de $count sera conservée et ne le sera pas. être répété. L'initialisation équivaut à ignorer directement la phrase static $count=0;.
Par conséquent, l'effet de l'application de statique à une fonction récursive peut être imaginé. Utilisezstatic pour initialiser les variables qui doivent être utilisées comme "ponts" entre les fonctions récursives. Chaque récursion conservera la valeur de la "variable de pont".
Le code est le suivant :function test($a=0){ static $result=array(); $a++; if ($a<10) { $result[]=$a; test($a); } return $result; }
Résumé
La fonction dite récursive se concentre sur la façon de gérer l'appel de fonction lui-même et comment s'assurer que les résultats requis sont obtenus "Passage" raisonnable entre les fonctions, bien sûr, il existe aussi des fonctions récursives qui n'ont pas besoin de transmettre des valeurs entre les fonctions, par exemple : Le code est le suivant :function test($a=0){ $a++; if ($a<10) { echo $a; test($a); } }
Démontrons PHP à travers un morceau de code Comment ajouter des nombres à l'aide d'une fonction récursive.
Le code est le suivant : Le code est le suivant :<?php function summation ($count) { if ($count != 0) : return $count + summation($count-1); endif; } $sum = summation(10); print "Summation = $sum"; ?>
总结:以上就是本篇文的全部内容,希望能对大家的学习有所帮助。
相关推荐:
实例详解php中serialize()与unserialize()函数
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!