PHP 再帰関数での return ステートメントの利用
PHP では、再帰関数は反復計算のための強力なメカニズムを提供します。ただし、再帰関数を扱う場合、return ステートメントの使用には注意が必要です。この記事では、再帰的アプローチを使用して一意の番号を生成しようとするときに発生する一般的な問題について説明します。
問題の説明
開発者は、一意のランダム バーコードを作成する必要があるシナリオに遭遇しました。生成される。生成されたバーコードがデータベースにすでに存在する場合、新しい乱数が生成されます。このプロセスは、一意のバーコードが見つかるまで続きます。開発者はこの目的で再帰関数を採用していますが、場合によってはこの関数が一意の番号の生成に失敗し、「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; } }
分析
提供されたコード スニペットは、次の数値以外の値がある場合に正しく機能します。データベースの 1 ~ 4。ただし、1 から 4 までのすべての数値が占有されている場合、一意の数値を生成できないため、関数は無限に再帰的に実行されます。この問題を解決するには、関数は各再帰ステップで生成された数値を返す必要があります。
修正されたコード スニペット
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; } }
各再帰ステップで生成された数値を返すことによってステップでは、関数は一意の番号が見つかるまで新しい番号を生成し続け、目的の機能を確保します。
以上が再帰的な PHP 関数で注意深い return ステートメントの処理が必要なのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。