Quelles sont les manières d'implémenter des fonctions récursives ? Comment ajouter des nombres à l'aide d'une fonction récursive ? Cet article présente principalement trois méthodes d'implémentation des fonctions récursives PHP et comment implémenter l'accumulation numérique. Les amis dans le besoin peuvent s'y référer.
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é
.
function test($a=0){ $a++; if ($a<10) { echo $a; test($a); } }
Utilisons un morceau de code pour démontrer comment PHP utilise des fonctions récursives pour implémenter la méthode d'accumulation numérique.
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递归函数,不必要伤脑筋,深入的理解变量引用相关知识对解决此类问题很有帮助,以上内容就是php递归函数三种实现方法及如何实现数字累加的全部内容,希望对大家今后的学习有所帮助。
以上就是本文的全部内容,希望对大家的学习有所帮助,更多相关内容请关注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!