La récursivité PHP est un mécanisme dans lequel une fonction s'appelle (directement ou indirectement). Cette idée puissante peut rendre certains concepts complexes extrêmement simples. Cet article présente principalement les exemples détaillés d'implémentation de la récursivité en PHP. Les amis qui ne connaissent pas grand-chose à la récursivité en PHP peuvent se référer à cet article
La définition de la récursivité
La récursivité est un mécanisme par lequel une fonction s'appelle (directement ou indirectement). Cette idée puissante peut rendre certains concepts complexes extrêmement simples. En dehors de l’informatique, notamment en mathématiques, le concept de récursion est courant. Par exemple : la séquence de Fibonacci, la plus couramment utilisée pour expliquer la récursion, en est un exemple très typique, et d'autres comme les niveaux (n !) peuvent également être transformées en définitions récursives (n ! = n*(n-1) ! ) . Même dans la vraie vie, la pensée récursive est visible partout : par exemple, en raison de problèmes académiques, vous avez besoin du sceau du directeur, mais le directeur dit : « Je ne le tamponnerai que si le doyen l'a tamponné quand vous le trouverez. le doyen, l'enseignant Le directeur a aussi dit : "Je ne le tamponnerai que s'il est tamponné par le doyen du département."... Jusqu'à ce que vous trouviez enfin le directeur, et après avoir obtenu le généreux cachet du directeur, il faut retourner chez le chef de département, le doyen, et enfin le directeur Stamp, le processus est le suivant :Une fonction récursive <.> est une fonction qui s'appelle elle-même. Soyez prudent lorsque vous écrivez des fonctions récursives, car elles peuvent réapparaître indéfiniment. Vous devez vous assurer qu'il existe des moyens adéquats pour mettre fin à la récursion.
1 : Utilisez la référence de paramètre pour compléter la fonction récursive. L'opération est la même adresse mémoire.
<?php $i=1; function test(&$i) { echo $i; $i++; if ($i < 10) { test($i); } } test($i);// 输出123456789 test ( $i );// 输出10 ?>
Deux : utilisez des variables globales pour compléter la fonction récursive. Une vraie variable globale importée avec l'instruction globale à l'intérieur du domaine de fonction établit en fait une référence à la variable globale. Dans l'exemple, $i à l'intérieur de la fonction test() n'est en fait qu'une application de la variable $i dans la première ligne du programme ($i = 1;
<?php $i = 1 ; function test () { global $i ; echo $i ; $i++; if ($i <10 ) { test(); } } test();// 输出123456789 test ();// 输出10 ?>
Le rôle du statique : initialiser la variable uniquement lorsque la fonction est appelée pour la première fois, et conserver la valeur de la variable.
Exemple 1. Parcours récursif à l'aide de variables globales
Parcourir tous les fichiers du dossier<?php function test () { static $i = 1 ; echo $i ; $i ++; if ( $i < 10 ) { test (); } $i --;// 在每一层递归结束时自减,这一句可以帮助理解递归函数的执行过程 } test();// 输出123456789 test();// 输出123456789 ?>
Exemple 2 : Parcours récursif à l'aide de variables statiques Tous les fichiers du dossier dossier
function getFiles($dir) { global $arr; if(is_dir($dir)){ $hadle = @opendir($dir); while($file=readdir($hadle) ) { if(!in_array($file,array('.', '..')) ) { $dirr = $dir.'/'.$file; if(is_dir($dirr)) { getFiles($dirr); }else{ array_push($arr, $dirr); } } } } } $arr = array(); getFiles('E:/logs'); print_r($arr);
function getFiles ($dir) { static $arr = array(); if(is_dir($dir)){ $hadle = opendir($dir); while($file=readdir($hadle)) { if(!in_array($file,array('.','..')) ) { $dirr = $dir."/".$file; if(is_dir($dirr)) { getFiles ($dirr); }else{ array_push($arr,$dirr); } } } } return $arr; } $rows= array(); $rows = getFiles ('E:/logs'); print_r($rows);
Ce qui précède est un exemple d'implémentation de la récursivité en PHP introduit par l'éditeur Explication détaillée, je l'espère aide tout le monde ! !
Articles recommandés :
Algorithme récursif PHP simplifié
. PHP ne nécessite pas de récursion Implémentation de l'arbre de classification Infinitus
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!