Maison > Questions et réponses > le corps du texte
Quelqu'un peut-il m'expliquer les fonctions récursives en PHP (sans utiliser Fibonacci) en termes simples et à l'aide d'exemples ? Je regarde un exemple mais Fibonacci est complètement perdu pour moi !
Merci d'avance ;-) De plus, à quelle fréquence les utilisez-vous dans le développement Web ?
P粉7093078652023-10-18 00:23:39
Un exemple serait d'imprimer chaque fichier dans n'importe quel sous-répertoire d'un répertoire donné (s'il n'y a pas de liens symboliques dans ces répertoires, cela pourrait interrompre la fonctionnalité d'une manière ou d'une autre). Le pseudo code pour imprimer tous les fichiers est le suivant :
function printAllFiles($dir) { foreach (getAllDirectories($dir) as $f) { printAllFiles($f); // here is the recursive call } foreach (getAllFiles($dir) as $f) { echo $f; } }
L'idée est d'imprimer d'abord tous les sous-répertoires, puis d'imprimer les fichiers du répertoire courant. Cette idée fonctionne pour tous les sous-répertoires, c'est pourquoi cette fonction est appelée de manière récursive pour tous les sous-répertoires.
Si vous voulez essayer cet exemple, vous devez consulter le répertoire spécial .
和 ..
,否则你会陷入调用 printAllFiles(". ")
一直如此。此外,您必须检查要打印的内容以及当前的工作目录是什么(请参阅opendir()
、getcwd()
...).
P粉6046694142023-10-18 00:03:08
Une fonction récursive est une fonction qui s'appelle elle-même
Si une fonction continue de s'appeler, comment sait-elle quand s'arrêter ? Vous définissez une condition, appelée scénario de base. Le cas de base indique à notre appel récursif quand s'arrêter, sinon il bouclera à l'infini.
Pour moi, un excellent exemple dont on peut tirer des leçons est Factorial一个>. D'après les commentaires ci-dessous, il semble que la fonction factorielle soit un peu trop lourde, je la laisse ici juste au cas où vous en auriez besoin.
function fact($n) { if ($n === 0) { // our base case return 1; } else { return $n * fact($n-1); // <--calling itself. } }
Concernant l'utilisation de fonctions récursives dans le développement web, personnellement, je n'utilise pas d'appels récursifs. Non pas que je pense que s'appuyer sur la récursivité soit une mauvaise pratique, mais cela ne devrait pas être votre premier choix. S'ils sont mal utilisés, ils peuvent être mortels.
Bien que je ne puisse pas rivaliser avec l'exemple de table des matières, j'espère que cela vous aidera.
Il est également utile de vérifier cette question, où la réponse acceptée démontre en termes simples comment fonctionnent les fonctions récursives. Même si la question du PO implique Java, les concepts sont les mêmes,