- 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/n/127127.html