一、php递归函数的返回值
例1:
function test($i){
$i-=4;
if($i<3) {
return $i;
}else{
test($i);
}
}
echo test(30)." ";
注意,以上代码中else内里是有问题的,条件$i<3时return$i所有函数照样不会返回值的。
例2,修改php递归函数为:
function test($i){
$i-=4;
if($i<3) {
return $i;
}else{
return test($i);
}
}
echo test(30)." ";
二、php递归函数返回值问题
要统计无限分类中,父类下的所有子类的总数(包括孙类,重孙类...),但是递归函数无法获得正确的返回值(因为每递归一次,就Return一次)。
怎么解决这个问题呢?
例子:
问题的确出在将$countsort_number定义为全局变量,所以每次循环都会改变.
但是,如果不把$countsort_number定义为全局变量的话,整个递归函数得到的值将会是0,因为这个变量是在函数内使用的.
所以现在产生了这个冲突:
1.如果global,在while内无法正常运行.
1.如果不global,函数本身就无法运行.
...有什么解决这个冲突的办法吗?
这个函数逻辑有问题
1. $countsort_sql = "SELECT * FROM `{$db_table}newssort` WHERE `newssort_pid` = '$pid'";
这个的字段newssort_pid,如果第一次$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;
}
补充回答:那是因为你的函数中定义了全局变量,每次循环后,全局变量已经改变了。
修改成:
对,这样的确return了 0
我再研究研究这个递归吧。先试试下边这种方式
三、php递归函数无返回值问题
php递归时没有进行return返回
例子,category为分类表,catid为主角,pid,为父键,level为层次,方法的作用就是根据分类catid,查找它最父级的catid
<?php
function get_cat_id($catid){
$sql = "select catid,pid,level from modoer_category where catid=$catid";
$query = mysql_query($sql);
$row = mysql_fetch_array($query);
if($row['pid'] == '0'){//当查到一级分类时
return $row['catid'];
}else{//当没有查到时,进行递归
//这里没写return的时候,就一直没返回值
return get_cat_id($row['pid']);
}
}
?>