Maison > développement back-end > tutoriel php > Pourquoi les fonctions PHP récursives nécessitent-elles une gestion minutieuse des instructions de retour ?

Pourquoi les fonctions PHP récursives nécessitent-elles une gestion minutieuse des instructions de retour ?

Barbara Streisand
Libérer: 2024-12-30 04:07:15
original
489 Les gens l'ont consulté

Why Do Recursive PHP Functions Need Careful Return Statement Handling?

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

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

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!

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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal