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

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

DDD
DDD原創
2024-12-30 20:54:12378瀏覽

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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn