ホームページ >バックエンド開発 >PHPチュートリアル >再帰的な PHP 関数が、固有のバーコードではなく「Not Set」を返す場合があるのはなぜですか?

再帰的な PHP 関数が、固有のバーコードではなく「Not Set」を返す場合があるのはなぜですか?

DDD
DDDオリジナル
2024-12-30 20:54:12400ブラウズ

Why Does My Recursive PHP Function Sometimes Return

PHP の再帰関数内での Return の利用

PHP では、再帰関数は複雑な問題を解決するための強力なツールとなります。再帰関数を作成する場合、正しいロジックを確保し、無限ループを回避するには、return ステートメントを適切に利用することが重要です。

このような利用法が見落とされがちなケースの 1 つは、次のシナリオで例示されているように、一意の値を生成する場合です。

質問:

目標は、データベース列にまだ存在していないランダムなバーコードを生成することです。この関数は再帰を使用して、一意の番号が見つかるまで繰り返し番号を生成します。ただし、この関数は、一意の番号を生成する代わりに「Not Set」を返すことがあります。

コード:

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;
  }
}

答え:

提供されたコードの問題は再帰呼び出しにあります。関数が確実に一意の番号を正しく返すようにするには、新しく生成された番号を再帰呼び出し自体から返す必要があります。

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(); // updated
  } else {
    return $barcode;
  }
}

生成された番号を再帰呼び出しから返すことにより、関数は呼び出し元が

追加の考慮事項:

すべての数値が取得された場合の終了条件。そのような条件がない場合、関数は PHP の再帰制限に達するまで自分自身を再帰的に呼び出し、エラーが発生します。

以上が再帰的な PHP 関数が、固有のバーコードではなく「Not Set」を返す場合があるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。