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 " ";
}
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);
?>