Les fonctions récursives en PHP
Les fonctions récursives en PHP
-
Objectifs
- Connaitre les fonctions récursives en PHP
-
Définition
- En programmation, la récursivité consiste à créer une méthode ou une procédure qui s’appelle elle-même.
- Une fonction est dite récursive si, à l’intérieur de son corps, elle s’appelle elle-même avec une valeur de paramètre différent (sinon elle boucle).
- Chaque appel constitue un niveau de récursivité.
- Les fonctions récursives sont un concept puissant en programmation qui vous permet de résoudre des problèmes complexes en les décomposant en des sous-problèmes plus simples. En PHP, les fonctions récursives fonctionnent de la même manière qu’en d’autres langages de programmation.
- L’exemple le plus classique est celui de la fonction qui retourne la factorielle d’un nombre entier n (notée n!).
- Pour calculer n!, une fonction récursive calcule n × (n – 1)!, ce qui implique un nouvel appel de la fonction factorielle et ainsi de suite jusqu’à calculer 1! (par définition 0! = 1), puis on remonte jusqu’à n!.
-
Utilisation
- Les fonctions récursives en PHP sont utilisées pour résoudre des problèmes qui peuvent être décomposés en des sous-problèmes plus simples et similaires au problème d’origine. Les fonctions récursives sont couramment utilisées pour travailler avec des structures de données récursives telles que les arbres, les listes chaînées, les graphes, etc. Voici quelques exemples d’utilisation de fonctions récursives en PHP.
-
Calculer la somme d’un tableau :
- Vous pouvez utiliser une fonction récursive pour calculer la somme de tous les éléments d’un tableau. La fonction s’appelle elle-même avec une partie réduite du tableau à chaque étape.
-
Parcours d’arborescence :
- Lorsque vous devez parcourir une structure d’arborescence, comme un arbre binaire, vous pouvez utiliser des fonctions récursives pour parcourir tous les nœuds de manière efficace.
-
Calcul de la suite de Fibonacci :
- La suite de Fibonacci est un autre exemple classique où les fonctions récursives peuvent être utilisées pour calculer les nombres de Fibonacci.
-
Applications
-
App01
- Écrire une fonction récursive pour calculer la factorielle pour un nombre donné, n :
-
App02
- Écrire une fonction récursive affichage pour afficher à l'écran les nombres inférieurs à 20 a partir d'un nombre donnée par l'utilisatuer:
-
App03
- Ecrire un sous-programme récursif qui calcule la somme des n premiers carrés.
- Par exemple, si n vaut 3, ce sous-programme calculera 12 + 22 + 32.
- Ce sous programme n’est défini que pour un n supérieur à 0.
function sommeTableau($arr) {
if (count($arr) == 0) {
return 0; // Cas de base : tableau vide
} else {
$premierElement = array_shift($arr);
return $premierElement + sommeTableau($arr); // Appel récursif
}
}
$tableau = [1, 2, 3, 4, 5];
$resultat = sommeTableau($tableau);
echo "La somme du tableau est : " . $resultat;
class Noeud {
public $valeur;
public $gauche;
public $droite;
function __construct($valeur) {
$this->valeur = $valeur;
$this->gauche = null;
$this->droite = null;
}
}
function parcoursArbre($noeud) {
if ($noeud !== null) {
echo $noeud->valeur . " ";
parcoursArbre($noeud->gauche);
parcoursArbre($noeud->droite);
}
}
$racine = new Noeud(1);
$racine->gauche = new Noeud(2);
$racine->droite = new Noeud(3);
$racine->gauche->gauche = new Noeud(4);
$racine->gauche->droite = new Noeud(5);
echo "Parcours de l'arbre binaire : ";
parcoursArbre($racine);
function fibonacci($n) {
if ($n <= 1) {
return $n; // Cas de base : Fibonacci de 0 et 1
} else {
return fibonacci($n - 1) + fibonacci($n - 2); // Appel récursif
}
}
$n = 10;
$resultat = fibonacci($n);
echo "Le nombre de Fibonacci à la position $n est : $resultat";
<?php
function facto($n)
{
if ($n==1) return 1;
else {return $n*facto($n-1);}
} echo "factorielle =",facto(150);
?>
Une fonction qui s'appelle elle-même est un boucle infinie par définition, donc n'oubliez pas de toujours prévoir un cas de sortie.
<?php
function factorielle($n) {
// Cas de base
if ($ n == 0) {
echo "Cas de base: $n = 0. Renvoi de 1 ... <br>";
return 1;
}
// Récursivité
echo "$n = $n: Calcul de $n * factorielle (". ($n-1). ") ... <br>";
$resultat = ($n * factorielle($n-1));
echo "Résultat de $n * factorielle (". ($n-1). ") = $resultat. Renvoi de $resultat ... <br>";
return $resultot;
}
echo "La factorielle de 5 est:". factorielle(5);
?>
function affichage($number) {
if($number<=10){
echo "$number <br/>";
affichage($number+1);
}
}
affichage(5);
function sommeCarrés($n) {
if ($n == 1) {
return 1; // Cas de base : 1^2
} else {
return $n * $n + sommeCarrés($n - 1); // Appel récursif
}
}
$n = 3;
$resultat = sommeCarrés($n);
echo "La somme des premiers $n carrés est : $resultat";