頭一次寫遞迴函式,煩請各位看看錯哪裡了,該如何處理
來源:互聯網
上載者:User
頭一次寫遞迴函式,煩請各位看看錯哪裡了
function check($num){
$sn=$num;
$sql= "select * from `a_dinghuo` where `num`= '$num ' ";
$q=mysql_query($sql);
$row=mysql_num_rows($q);
if($row==1){
$sn=($num+1);
check($num+1);
}
return $sn;
}
我的思路是如果資料庫本身有這個數值,那麼該數值+1
可是,我最後返回的還是原來的參數...請問哪裡錯了
小弟在此多謝了
------解決方案--------------------
因為你的資料庫裡沒有那個數。
------解決方案--------------------
function check($num) {
$sn=$num;
$sql= "select * from `a_dinghuo` where `num`= '$num ' ";
$q=mysql_query($sql);
$row=mysql_num_rows($q);
if($row==1) {
$sn = check($num+1);// 修改這裡
}
return $sn;
}
這樣修改一下,不過在這裡看不出遞迴的作用來
------解決方案--------------------
如果有的話,你的遞迴就會死迴圈,出不來了
------解決方案--------------------
確實是一個死迴圈!應該加上一個遞迴跳出!比如說判定2次或者超過某個數就跳出!
function check($num){
static $array = array(1,2,3,4,5,6,7,8,9,10);
$sn=$num;
if(in_array($num, $array)){
print $num. ' ';
$sn=($num+1);
check($num+1);
}
return $sn;
}
print check(3);
?>
輸出:3 4 5 6 7 8 9 10 4
如果你的資料庫num記錄很多且是序列的話,你會發現你的mysql語句執行的很高
------解決方案--------------------
樓上死迴圈不會吧,仔細看下
$num+1 ......
------解決方案--------------------
$sql= "select * from `a_dinghuo` where `num`= '$num ' ";
check($num+1);
$num應該還是要類型統一下吧..
------解決方案--------------------
function check($num){
static $sn;
$sql= "select * from `a_dinghuo` where `num`= '$num ' ";
$q=mysql_query($sql);
$row=mysql_num_rows($q);
if($row==1){
$sn .= ($num+1);
check($num+1);
}
return $sn;
}