Utilisation des instructions de retour dans les fonctions récursives PHP
En PHP, les fonctions récursives fournissent un mécanisme puissant pour les calculs itératifs. Cependant, lorsqu'il s'agit de fonctions récursives, l'utilisation d'instructions return nécessite une attention particulière. Cet article aborde un problème courant rencontré lors de la tentative de génération de nombres uniques à l'aide d'une approche récursive.
Énoncé du problème
Un développeur rencontre un scénario dans lequel un code-barres aléatoire unique doit être généré. Si le code-barres généré existe déjà dans une base de données, un nouveau nombre aléatoire est généré. Ce processus se poursuit jusqu'à ce qu'un code-barres unique soit trouvé. Le développeur utilise une fonction récursive à cet effet, mais parfois la fonction ne parvient pas à générer un numéro unique et renvoie « Non défini ».
Extrait de code
function generate_barcode() { $barcode = rand(1, 10); $bquery = mysql_num_rows(mysql_query("SELECT * FROM stock_item WHERE barcode='$barcode'")); if ($bquery == 1) { generate_barcode(); } else { return $barcode; } }
Analyse
L'extrait de code fourni fonctionne correctement s'il y a des nombres autres que 1 à 4 dans le base de données. Cependant, si tous les nombres de 1 à 4 sont occupés, la fonction se répétera sans fin car aucun nombre unique ne pourra être généré. Pour résoudre ce problème, la fonction doit renvoyer le numéro généré à chaque étape récursive.
Extrait de code corrigé
function generate_barcode() { $barcode = rand(1, 10); $bquery = mysql_num_rows(mysql_query("SELECT * FROM stock_item WHERE barcode='$barcode'")); if ($bquery == 1) { return generate_barcode(); // Return generated number } else { return $barcode; } }
En renvoyant le numéro généré à chaque étape récursive Étape, la fonction continue de générer de nouveaux numéros jusqu'à ce qu'un numéro unique soit trouvé, garantissant la fonctionnalité souhaitée.
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!