Maison  >  Article  >  développement back-end  >  Trois façons d'implémenter des fonctions récursives en PHP

Trois façons d'implémenter des fonctions récursives en PHP

墨辰丷
墨辰丷original
2018-06-07 17:11:041435parcourir

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 acc008442d8565d38cdb0d3a60c44baf3 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, 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();
Quel est le résultat d'exécution de ce code ? Est-ce

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é. Utilisez

static 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实现正则匹配操作的方法

实例详解php中serialize()与unserialize()函数

实例分析一个实用的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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn