如何用好php递归函数返回值并不难

发布时间:2020-12-02编辑:脚本学堂
php递归函数返回值的正确用法,通过例子掌握下php递归函数中返回值的正确输出方法,解决php递归函数在使用时无返回值的问题,一起来了解下。

php递归函数返回值使用方法

php递归函数的返回值

例子:
 

复制代码 代码示例:
<?php
functiontest($i)

$i-=4;  if($i<3)
{
return$i;

else

test($i);
}  
}  
echotest(30); 
?>

在这里执行的test没有返回值。
虽然,满足条件$i<3时return$i,但整个函数还是不会返回值的。

改进后的PHP递归函数:

复制代码 代码示例:
<?php
functiontest($i)

$i-=4;  if($i<3) 

return$i; 

else 

returntest($i);//增加return,让函数返回值 

}  
echotest(30); 
?>

二、php递归函数的写法

在写php递归函数时,需要防止程序出现死循环。
因此,在进行函数内部的函数本身调用时,必须进行条件的判断。

以下是对于数据库查询无限分类是实现的递归调用

例子:
 

复制代码 代码示例:
function getModule($pid,$level){
$span = 0;
$sql_p = "select * from wiipu_module where module_parentid = ".$pid." and module_level = ".$level;
$result_p = mysql_query($sql_p);
while($row_p = mysql_fetch_assoc($result_p)){
if($row_p){
$level++;
//echo '|-'.$row_p['module_level'].$row_p['module_title'].'<br />';
//获得上级名称
$sql_ptitle = "select * from wiipu_module where module_id = ".$row_p['module_parentid'];
$result_ptitle = mysql_query($sql_ptitle);
$row_ptitle = mysql_fetch_assoc($result_ptitle);
$ptitle = $row_ptitle['module_title'];
echo "<tr>";
echo "<td class='td1'>";
$num = $row_p['module_level']-2;
for($i=0;$i<=$num;$i++){
echo "&nbsp;&nbsp;";
}
echo "|- ".$row_p['module_title']."</td>";
echo "<td>".$ptitle."</td>";
echo "<td>".$row_p['module_level']."级</td>";
echo "<td><a href='moduleaddm.php?mid=".$row_p['module_id']."'>添加下级</a></td>";
echo "<td><a href='moduleeditm.php?mid=".$row_p['module_id']."'><img src='images/dot_edit.gif' widht='9' hieght='9' /></a></td>";
echo "<td><a href='javascript:if(confirm("您确定要删除吗?")){location.href="module_do.php?act=del&id=".$row_p['module_id'].""}'><img src='images/dot_del.gif' width='9' height='9' alt='删除' /></td>";
echo "</tr>";
getModule($row_p['module_id'],$level);
}
}
}

三、php递归函数返回值时出现的问题解决办法

有关php递归返回值时出现的问题,问题出在递归函数的返回值上。

例子:
 

复制代码 代码示例:
<?php  
function test($i)  
{  
$i -= 4;  
if($i < 3)  
{  
return $i;  
}  
else
{  
test($i);  
}  
}  
echo test(30);  
?>

以上代码中,else是有问题的,在这里执行的test没有返回值。所以虽然满足条件$i < 3时 return $i整个函数还是不会返回值的。

例子,对上面的php递归返回值函数做如下修改:
 

复制代码 代码示例:
< ?php  
function test($i)  
{  
$i -= 4;  
if($i < 3)  
{  
return $i;  
}  
else
{  
return test($i); //增加return, 让函数返回值  
}  
}  
echo test(30);  
?>