首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >计算递归函数被调用的次数

计算递归函数被调用的次数
EN

Stack Overflow用户
提问于 2013-06-13 16:32:01
回答 8查看 9.6K关注 0票数 4

我需要知道一个递归函数在函数中被调用了多少次。这是我的函数:

代码语言:javascript
复制
function structure($x) {
$qry = mysql_query("SELECT `parent_id` FROM `categories` WHERE `categories_id`=$x");
$result = mysql_fetch_assoc($qry);
$cat = $result['parent_id'];
if($cat !=0) {
    structure($cat);
}
echo $cat.' >';
}

我尝试添加一个计数器,例如$i=0,然后添加$i++,但每次调用函数时,它当然会恢复到$i=0。我已经尝试添加数组并对数组进行计数,但当然,每次调用该函数时,它都必须设置一个新的数组$i=array()。

我认为唯一可行的方法是,如果我在函数外部设置数组或计数器,但我不知道是否可以在函数外部调用变量。

关于如何在函数外调用变量,或者更好地计算函数被调用的次数,你有什么想法吗?

EN

回答 8

Stack Overflow用户

发布于 2013-06-13 16:36:47

选项1:通过引用传递变量

代码语言:javascript
复制
function structure($cat, &$counter) {
    $counter++;
    ...
}

structure('foo', $counter);

echo $counter;

选项2:使用static变量

代码语言:javascript
复制
function structure($cat) {
    static $counter = 0;
    echo ++$counter;
    ...
}

选项3:使用global变量(不,不!)

代码语言:javascript
复制
$counter = 0;

function structure($cat) {
    global $counter;
    $counter++;
    ...
}

选项4:使用闭包

代码语言:javascript
复制
$counter = 0;

$structure = function ($cat) use (&$counter) {
    $counter++;
    ...
}

$structure('foo');
echo $counter;
票数 19
EN

Stack Overflow用户

发布于 2013-06-13 16:34:14

您可以向递归函数添加另一个参数,该参数将用作计数器:

代码语言:javascript
复制
function structure($x, $cnt) {
    $qry = mysql_query("SELECT `parent_id` FROM `categories` WHERE `categories_id`=$x");
    $result = mysql_fetch_assoc($qry);
    $cat = $result['parent_id'];
    if($cat !=0) {
        structure($cat, $cnt++);
    }
    echo $cat.' >';
}

或者,您可以使用全局变量。

票数 4
EN

Stack Overflow用户

发布于 2013-06-13 16:36:30

当我遇到这个问题时,我通常的解决方案是添加一个计数器变量作为额外的参数,例如

代码语言:javascript
复制
function structure($x, $i=0) {
    ...
    structure($nextX, ++$i);
    ...
}

这样做的好处是,对structure的原始调用不需要您指定计数器,并且仍然可以像structure($x);一样调用计数器

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17082608

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档