首頁 > 後端開發 > php教程 > 為什麼我的遞歸 PHP 函數有時會傳回「未設定」而不是唯一的條碼?

為什麼我的遞歸 PHP 函數有時會傳回「未設定」而不是唯一的條碼?

DDD
發布: 2024-12-30 20:54:12
原創
400 人瀏覽過

Why Does My Recursive PHP Function Sometimes Return

在 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;
  }
}
登入後複製

答案:

提供程式碼中的問題在於遞歸呼叫。為了確保函數正確傳回唯一的數字,需要從遞歸呼叫本身傳回新產生的數字:

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 函數有時會傳回「未設定」而不是唯一的條碼?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板