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