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