- 1、如何理解php中的遞歸函數 (詳細講解)
- 2、PHP 遞歸函數返回值問題
- 3、php遞歸函數
- 4、(用php遞歸函數輸出)1-2+3-4+….+99-100結果。
- 5、php 遞歸問題
遞歸其實就是“一個函數的自調用”
在這個“自調用”的過程中,必須要有一個變化的“參數”,當這個“參數”達到你的期望值的時候,終止該“自調用”過程
拿樓主的程序來說
demo($n)內部又有調用demo($n-1),構成了“自調用”
且,$n又有一個“期望值”,即是$n1,不滿足此條件時,該自調用終止
即是說,最後一個執行的demo是demo($n9-1),其中$n9=2,然後返回為1(因為執行了return 1)
則$n9*demo($n9-1)即等於 2*demo(2-1),又等於2*1=2;
則$n8*demo($n8-1)即等於 3*demo(3-1),又等於3*2=6;
則$n7*demo($n7-1)即等於 4*demo(4-1),又等於4*6=24;
……
依次類推
這樣想:
demo(1)是等於1,這個沒有疑問吧?
然後demo(2)等於2*demo(1)=2*1=2
然後demo(3)等於3*demo(2)=3*2=6
……
一直到demo(10)
朋友,你這個函數邏輯有問題
1.
$countsort_sql
=
“SELECT
*
FROM
`{$db_table}newssort`
WHERE
`newssort_pid`
=
‘$pid'”;
這個的字段newssort_pid,如果第一次$pid可以查詢出結果,那麼下邊
while($countsort_row
=
mysql_fetch_assoc($countsort_result)){
countSort($countsort_row[‘newssort_pid’]);
}
這裡的參數$countsort_row[‘newssort_pid’]就是你第一次輸入$pid,那麼如果按照正常思路就永遠循環
所以,我認為這裡的countSort($countsort_row[‘newssort_pid’]);中$countsort_row[‘newssort_pid’]應該加以變化,比如+1
2.遞歸的判斷條件if($countsort_number
0)
這個$countsort_number
如果有一次查詢結果那麼它永遠是0,這是不對的。
修改函數如下,希望對你有所幫助。
function
countSort($pid)
{
global
$countsort_number;
$countsort_sql
=
“SELECT
*
FROM
`{$db_table}newssort`
WHERE
`newssort_pid`
=
‘$pid'”;
$countsort_result
=
mysql_query($countsort_sql)
or
die(‘數據庫查詢失敗,請與管理員聯繫!’);
$num=mysql_num_rows($countsort_result);
$countsort_number
+=$num;
if(
$num
0)
{
while($countsort_row
=
mysql_fetch_assoc($countsort_result)){
countSort(++$countsort_row[‘newssort_pid’]);
}
mysql_free_result($countsort_result);
}
else
$abc=
$countsort_number;
}
遞歸其實就是“一個函數的自調用”
在這個“自調用”的過程中,必須要有一個變化的“參數”,當這個“參數”達到你的期望值的時候,終止該“自調用”過程
拿樓主的程序來說
demo($n)內部又有調用demo($n-1),構成了“自調用”
且,$n又有一個“期望值”,即是$n1,不滿足此條件時,該自調用終止
即是說,最後一個執行的demo是demo($n9-1),其中$n9=2,然後返回為1(因為執行了return 1)
則$n9*demo($n9-1)即等於 2*demo(2-1),又等於2*1=2;
則$n8*demo($n8-1)即等於 3*demo(3-1),又等於3*2=6;
則$n7*demo($n7-1)即等於 4*demo(4-1),又等於4*6=24;
……
依次類推
這樣想:
demo(1)是等於1,這個沒有疑問吧?
然後demo(2)等於2*demo(1)=2*1=2
然後demo(3)等於3*demo(2)=3*2=6
……
一直到demo(10)
public function test($count,$i){
if($i 100){
return ;
}
if($i%2 == 1){
$count = $count – ($i+1);
test($count,$i+1);
}else{
$count = $count + ($i+1);
test($count,$i+1);
}
}
//執行
$i = 1;
$count = 1;
test($count,$i);
var_dump($count);exit;
第一,沒有選擇數據庫,在連接數據庫後添加mysql_select_db(“數據庫名”);
第二、我感覺不代碼不全吧,因為我拷下來看了一下,少一},當然上面那個沒少,補充的少了。
第三、還有沒看出這個$ii是幹什麼用的。
第四、沒感覺$selec=0與不等於0輸出有什麼不同。
第五、以後最好是把html代碼與程序分開寫。
因為不知道需求,只能根據你的程序簡單修改如下:
?php
function TreeMenu($selec) {
$Conn=mysql_connect(“localhost”,”kk”,”kk123″);
mysql_select_db(“數據庫名”);
$ii=1;
$sql=”select * from tvmenu where bid=”.$selec;
$result=mysql_query($sql,$Conn);
$str = “”;
while($row =mysql_fetch_array($result)) {
if($selec=0) {
$str = ‘option value=”‘.$row[‘id’].'”‘.$row[‘name’].’/option ‘;
}else {
$str = ‘option value=”‘.$row[‘id’].'”‘.$row[‘name’].’/option ‘;
}
echo $str;
$ii++;
TreeMenu($row[‘id’]);
$ii–;
}
}
?
select name=”bid” id=”bid”
?php
TreeMenu(0);
?
/select
原創文章,作者:SPQC3,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/127127.html