Recursive (http://en.wikipedia.org/wiki/Recursive) 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écursion en PHP. Les amis qui en ont besoin peuvent se référer à
Définition de la récursion
Récursion (http). :/en.wikipedia.org/wiki/Recursive) 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. 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) ! ) .
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 ?>
3 : Utilisez des variables statiques pour compléter la fonction récursive.
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.<?php function test () { static $i = 1 ; echo $i ; $i ++; if ( $i < 10 ) { test (); } $i --;// 在每一层递归结束时自减,这一句可以帮助理解递归函数的执行过程 } test();// 输出123456789 test();// 输出123456789 ?>
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);
Recommandations associées :
Explication détaillée de l'algorithme récursif PHP
thinkPHP implémente une colonne de boucle récursive et la génère selon la structure arborescente infinie
PHP implémente des opérations d'arbre binaire de traversée pré-commande/dans-commande/post-commande basées sur un algorithme non récursif
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!