递归函数的替代方案

时间:2013-09-03 11:12:28

标签: recursion iteration

我一直在研究MLM(多层次营销)应用程序。 下面是我在初始阶段编写并正常工作的递归函数的代码片段(不是整个代码)。但现在MLM树太深,递归函数停止。它表示超出了最大嵌套级别。我几次增加了嵌套函数调用级别,但现在我不想进一步增加它,因为我知道这不是正确的解决方案。

有人可以为我建议替代代码(可能是迭代的)吗?

<?php
function findallpairs($username, $totalusers= 0)
{
$sql = "select username,package_id from tbl_user where 
    parent_id = '".$username."'      order by username";
$result = mysql_query($sql);
if(mysql_num_rows($result) > 0)
{       
    while($row = mysql_fetch_array($result))
    {           
        $username = $row["username"];
        $totalusers++;

        $arrtmp = findallpairs($username, $totalusers);
        $totalusers = $arrtmp["totalusers"];
    }
}

$arrpoints["totalusers"] = $totalusers;

return $arrpoints;
}
?>

注意:请记住我的原始代码太大了,但我一直在粘贴逻辑的重要方面。

如果我找到替代解决方案,对我来说将是一个很大的帮助。

提前致谢!

1 个答案:

答案 0 :(得分:1)

你有多深?

这一天在你的sql数据库中创建了一个mutliway树。树是递归结构,递归代码是自然适合的。

你可以使用我称之为准记忆化的东西。

如果您在DB结构中列出了子项,这应该很容易。对没有childrin的所有用户进行结果,将其值记忆到散列或树中,其中键是用户ID和值1.然后只是对每个用户(或只是memiozed条目的父项)进行质量迭代,如果有为所有孩子记忆的值,将它们加在一起并记住那个值。重复迭代,直到找到根(没有父级的用户)

如果你没有孩子的记录,那可能非常低效。