Comment utiliser les fonctions récursives en PHP pour accumuler des nombres

伊谢尔伦
Libérer: 2023-03-12 10:00:02
original
1983 Les gens l'ont consulté

Quelles sont les méthodes pour implémenter une fonction récursive ? Comment ajouter des nombres à l'aide d'une fonction récursive ? Cet article présente principalement les trois méthodes d'implémentation de la fonction récursive 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 couramment utilisé en programmation. Sa caractéristique est que la fonction elle-même peut s'appeler, mais elle doit avoir un jugement conditionnel avant de s'appeler, sinon elle provoquera appels infinis. Cet article répertorie trois méthodes d'implémentation de fonctions récursives. La première utilise pour référencer comme paramètres, la seconde utilise des variables globales et la troisième utilise des variables statiques . ce genre de problème C'est un peu basique, y compris une compréhension des variables globales, des références et des variables statiques, ainsi qu'une compréhension de leur portée. 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;
}
Copier après la connexion

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;
}
Copier après la connexion

La troisième méthode : utiliser des variables statiques

Nous Nous voyons souvent du static dans la classe. Aujourd'hui, nous l'utilisons dans les 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();
Copier après la connexion

J'aimerais savoir le résultat de l'exécution de ce code Combien ? 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;
}
Copier après la connexion

Résumé

  所谓递归函数,重点是如何处理函数调用自身是如何保证所需要的结果得以在函数间合理"传递",当然也有不需要函数之间传值得递归函数,例如:

代码如下:

function test($a=0){
    $a++;
    if ($a<10) {
        echo $a;
        test($a);
    }
}
Copier après la connexion

下面通过一段代码演示一下php使用递归函数实现数字累加的方法。

代码如下所示:

代码如下:

<?php
function summation ($count) {
   if ($count != 0) :
     return $count + summation($count-1);
   endif;
}
$sum = summation(10);
print "Summation = $sum";
?>
Copier après la connexion

      

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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal