Maison >développement back-end >tutoriel php >Principes et applications de l'appel récursif des fonctions PHP

Principes et applications de l'appel récursif des fonctions PHP

WBOY
WBOYoriginal
2024-04-17 10:45:021061parcourir

Principe de récursion de fonction : la fonction s'appelle elle-même (auto-référence). Les paramètres changent à chaque appel. Continuez la récursion jusqu'à ce que la condition de récursion (condition d'arrêt) soit remplie. Application récursive de fonctions : simplification de problèmes complexes (les décomposant en sous-problèmes). Code propre (plus élégant). Exemple : Calculer une factorielle (décomposée en produits). Rechercher les ancêtres d'un nœud dans l'arborescence (recherche récursive).

PHP 函数递归调用的原理和应用

Le principe et l'application de l'appel récursif de fonction PHP

Qu'est-ce que la récursion de fonction

La récursion de fonction fait référence à une caractéristique auto-référentielle de la fonction qui s'appelle elle-même. Lorsqu’une fonction est appelée en elle-même, on parle d’appel récursif.

Le principe de récursion

  1. La fonction s'appelle elle-même.
  2. Dans les appels récursifs, les paramètres de la fonction changeront.
  3. Le processus récursif se poursuivra jusqu'à ce que la condition récursive soit atteinte.
  4. Une fois la condition de récursion remplie, la fonction arrêtera la récursion et renverra le résultat.

Avantages de la récursion

  • Résoudre des problèmes complexes : la récursion peut décomposer des problèmes complexes en sous-problèmes plus petits, simplifiant ainsi la solution.
  • Simplicité du code : le code récursif est généralement plus concis et élégant que le code non récursif.

Cas d'application

1. Calculer factorielle

function factorial($number) {
  if ($number == 1) {
    return 1;
  } else {
    return $number * factorial($number - 1);
  }
}

echo factorial(5); // 输出: 120

2 Trouvez les ancêtres des nœuds dans l'arbre

class Node {
  public $data;
  public $children;
}

function findAncestors($node, $target) {
  if ($node->data == $target) {
    return [$node->data];
  } else {
    $ancestors = [];
    foreach ($node->children as $child) {
      $ancestors = array_merge($ancestors, findAncestors($child, $target));
    }
    if (!empty($ancestors)) {
      $ancestors[] = $node->data;
    }
    return $ancestors;
  }
}

$root = new Node(['data' => 'root']);
$node1 = new Node(['data' => 'node1']);
$node2 = new Node(['data' => 'node2']);
$node3 = new Node(['data' => 'node3']);
$root->children = [$node1, $node2];
$node2->children = [$node3];

$ancestors = findAncestors($root, 'node3');
var_dump($ancestors); // 输出: ['root', 'node2', 'node3']
.

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